Skip to content

Commit feed35e

Browse files
committed
Version based tests: Do version checks in one place, fix check when setting options
1 parent 411a64f commit feed35e

5 files changed

+49
-99
lines changed

Diff for: config.m4

+4-79
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,10 @@ if test "$PHP_MEMCACHED" != "no"; then
273273

274274
if test "$PHP_LIBMEMCACHED_DIR" != "no" && test "$PHP_LIBMEMCACHED_DIR" != "yes"; then
275275
export PKG_CONFIG_PATH="$PHP_LIBMEMCACHED_DIR/$PHP_LIBDIR/pkgconfig"
276+
277+
if test ! -f "$PHP_LIBMEMCACHED_DIR/include/libmemcached/memcached.h"; then
278+
AC_MSG_ERROR(Unable to find memcached.h under $PHP_LIBMEMCACHED_DIR)
279+
fi
276280
else
277281
export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/$PHP_LIBDIR/pkgconfig:/usr/$PHP_LIBDIR/pkgconfig:/opt/$PHP_LIBDIR/pkgconfig"
278282
fi
@@ -294,64 +298,9 @@ if test "$PHP_MEMCACHED" != "no"; then
294298
#
295299
# Added -lpthread here because AC_TRY_LINK tests on CentOS 6 seem to fail with undefined reference to pthread_once
296300
#
297-
LIBS="$LIBS -lpthread"
298301
ORIG_CFLAGS="$CFLAGS"
299302
CFLAGS="$CFLAGS $INCLUDES"
300303

301-
AC_CACHE_CHECK([whether memcached_instance_st is defined], ac_cv_have_memcached_instance_st, [
302-
AC_TRY_COMPILE(
303-
[ #include <libmemcached/memcached.h> ],
304-
[ const memcached_instance_st *instance = NULL; ],
305-
[ ac_cv_have_memcached_instance_st="yes" ],
306-
[ ac_cv_have_memcached_instance_st="no" ]
307-
)
308-
])
309-
310-
AC_CACHE_CHECK([whether MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS is defined], ac_cv_have_libmemcached_remove_failed_servers, [
311-
AC_TRY_COMPILE(
312-
[ #include <libmemcached/memcached.h> ],
313-
[ (void)MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS; ],
314-
[ ac_cv_have_libmemcached_remove_failed_servers="yes" ],
315-
[ ac_cv_have_libmemcached_remove_failed_servers="no" ]
316-
)
317-
])
318-
319-
AC_CACHE_CHECK([whether MEMCACHED_SERVER_TEMPORARILY_DISABLED is defined], ac_cv_have_libmemcached_server_temporarily_disabled, [
320-
AC_TRY_COMPILE(
321-
[ #include <libmemcached/memcached.h> ],
322-
[ (void)MEMCACHED_SERVER_TEMPORARILY_DISABLED; ],
323-
[ ac_cv_have_libmemcached_server_temporarily_disabled="yes" ],
324-
[ ac_cv_have_libmemcached_server_temporarily_disabled="no" ]
325-
)
326-
])
327-
328-
AC_CACHE_CHECK([whether memcached function exists], ac_cv_have_libmemcached_memcached, [
329-
AC_TRY_LINK(
330-
[ #include <libmemcached/memcached.h> ],
331-
[ memcached("t", sizeof ("t")); ],
332-
[ ac_cv_have_libmemcached_memcached="yes" ],
333-
[ ac_cv_have_libmemcached_memcached="no" ]
334-
)
335-
])
336-
337-
AC_CACHE_CHECK([whether libmemcached_check_configuration function exists], ac_cv_have_libmemcached_check_configuration, [
338-
AC_TRY_LINK(
339-
[ #include <libmemcached/memcached.h> ],
340-
[ libmemcached_check_configuration("", 1, "", 1); ],
341-
[ ac_cv_have_libmemcached_check_configuration="yes" ],
342-
[ ac_cv_have_libmemcached_check_configuration="no" ]
343-
)
344-
])
345-
346-
AC_CACHE_CHECK([whether memcached_touch function exists], ac_cv_have_libmemcached_touch, [
347-
AC_TRY_LINK(
348-
[ #include <libmemcached/memcached.h> ],
349-
[ memcached_touch (NULL, NULL, 0, 0); ],
350-
[ ac_cv_have_libmemcached_touch="yes" ],
351-
[ ac_cv_have_libmemcached_touch="no" ]
352-
)
353-
])
354-
355304
AC_MSG_CHECKING([whether to enable sasl support])
356305
if test "$PHP_MEMCACHED_SASL" != "no"; then
357306
AC_MSG_RESULT(yes)
@@ -387,30 +336,6 @@ if test "$PHP_MEMCACHED" != "no"; then
387336
AC_MSG_RESULT([no])
388337
fi
389338

390-
if test "$ac_cv_have_memcached_instance_st" = "yes"; then
391-
AC_DEFINE(HAVE_MEMCACHED_INSTANCE_ST, [1], [Whether memcached_instance_st is defined])
392-
fi
393-
394-
if test "$ac_cv_have_libmemcached_remove_failed_servers" = "yes"; then
395-
AC_DEFINE(HAVE_LIBMEMCACHED_REMOVE_FAILED_SERVERS, [1], [Whether MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS is defined])
396-
fi
397-
398-
if test "$ac_cv_have_libmemcached_server_temporarily_disabled" = "yes"; then
399-
AC_DEFINE(HAVE_LIBMEMCACHED_SERVER_TEMPORARILY_MARKER_DISABLED, [1], [Whether MEMCACHED_SERVER_TEMPORARILY_DISABLED is defined])
400-
fi
401-
402-
if test "$ac_cv_have_libmemcached_memcached" = "yes"; then
403-
AC_DEFINE(HAVE_LIBMEMCACHED_MEMCACHED, [1], [Whether memcached is defined])
404-
fi
405-
406-
if test "$ac_cv_have_libmemcached_check_configuration" = "yes"; then
407-
AC_DEFINE(HAVE_LIBMEMCACHED_CHECK_CONFIGURATION, [1], [Whether libmemcached_check_configuration is defined])
408-
fi
409-
410-
if test "$ac_cv_have_libmemcached_touch" = "yes"; then
411-
AC_DEFINE(HAVE_LIBMEMCACHED_TOUCH, [1], [Whether memcached_touch is defined])
412-
fi
413-
414339
PHP_MEMCACHED_FILES="php_memcached.c php_libmemcached_compat.c fastlz/fastlz.c g_fmt.c"
415340

416341
if test "$PHP_MEMCACHED_SESSION" != "no"; then

Diff for: php_libmemcached_compat.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020

2121
memcached_st *php_memc_create_str (const char *str, size_t str_len)
2222
{
23-
#if HAVE_LIBMEMCACHED_MEMCACHED
23+
#ifdef HAVE_LIBMEMCACHED_MEMCACHED
2424
return memcached (str, str_len);
2525
#else
2626
memcached_return rc;

Diff for: php_libmemcached_compat.h

+22-1
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,31 @@
2222

2323
memcached_st *php_memc_create_str (const char *str, size_t str_len);
2424

25-
#ifndef HAVE_LIBMEMCACHED_SERVER_TEMPORARILY_MARKER_DISABLED
25+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX < 0x00052000
2626
# define MEMCACHED_SERVER_TEMPORARILY_DISABLED (1024 << 2)
2727
#endif
2828

29+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x01000002
30+
# define HAVE_MEMCACHED_TOUCH 1
31+
#endif
32+
33+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x01000017
34+
# define HAVE_MEMCACHED_INSTANCE_ST 1
35+
#endif
36+
37+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x00049000
38+
# define HAVE_LIBMEMCACHED_CHECK_CONFIGURATION 1
39+
#endif
40+
41+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x01000002
42+
# define HAVE_MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS 1
43+
#endif
44+
45+
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x00049000
46+
# define HAVE_LIBMEMCACHED_MEMCACHED 1
47+
#endif
48+
49+
2950
#ifdef HAVE_MEMCACHED_INSTANCE_ST
3051
typedef const memcached_instance_st * php_memcached_instance_st;
3152
#else

Diff for: php_memcached.c

+20-16
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,7 @@ static PHP_METHOD(Memcached, __construct)
452452
if (plist_key) {
453453
efree(plist_key);
454454
}
455-
#if HAVE_LIBMEMCACHED_CHECK_CONFIGURATION
455+
#ifdef HAVE_LIBMEMCACHED_CHECK_CONFIGURATION
456456
if (libmemcached_check_configuration(conn_str, conn_str_len, error_buffer, sizeof(error_buffer)) != MEMCACHED_SUCCESS) {
457457
php_error_docref(NULL TSRMLS_CC, E_ERROR, "configuration error %s", error_buffer);
458458
} else {
@@ -1159,7 +1159,7 @@ PHP_METHOD(Memcached, setByKey)
11591159
}
11601160
/* }}} */
11611161

1162-
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x01000002
1162+
#ifdef HAVE_MEMCACHED_TOUCH
11631163
/* {{{ Memcached::touch(string key, [, int expiration ])
11641164
Sets a new expiration for the given key */
11651165
PHP_METHOD(Memcached, touch)
@@ -1496,7 +1496,7 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
14961496
key_len, payload, payload_len, expiration, flags);
14971497
}
14981498
break;
1499-
#ifdef HAVE_LIBMEMCACHED_TOUCH
1499+
#ifdef HAVE_MEMCACHED_TOUCH
15001500
case MEMC_OP_TOUCH:
15011501
if (!server_key) {
15021502
status = memcached_touch(m_obj->memc, key, key_len, expiration);
@@ -2126,7 +2126,7 @@ PHP_METHOD(Memcached, flushBuffers)
21262126
}
21272127
/* }}} */
21282128

2129-
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x00049000
2129+
#ifdef HAVE_LIBMEMCACHED_CHECK_CONFIGURATION
21302130
/* {{{ Memcached::getLastErrorMessage()
21312131
Returns the last error message that occurred */
21322132
PHP_METHOD(Memcached, getLastErrorMessage)
@@ -2515,14 +2515,19 @@ static int php_memc_set_option(php_memc_t *i_obj, long option, zval *value TSRML
25152515
/*
25162516
* Assume that it's a libmemcached behavior option.
25172517
*/
2518-
flag = (memcached_behavior) option;
2519-
convert_to_long(value);
2520-
2521-
if (flag >= 0 && flag < MEMCACHED_BEHAVIOR_MAX) {
2522-
rc = memcached_behavior_set(m_obj->memc, flag, (uint64_t) Z_LVAL_P(value));
2518+
if (option < 0) {
2519+
rc = MEMCACHED_INVALID_ARGUMENTS;
25232520
}
25242521
else {
2525-
rc = MEMCACHED_INVALID_ARGUMENTS;
2522+
flag = (memcached_behavior) option;
2523+
convert_to_long(value);
2524+
2525+
if (flag < MEMCACHED_BEHAVIOR_MAX) {
2526+
rc = memcached_behavior_set(m_obj->memc, flag, (uint64_t) Z_LVAL_P(value));
2527+
}
2528+
else {
2529+
rc = MEMCACHED_INVALID_ARGUMENTS;
2530+
}
25262531
}
25272532

25282533
if (php_memc_handle_error(i_obj, rc TSRMLS_CC) < 0) {
@@ -4124,7 +4129,7 @@ static zend_function_entry memcached_class_methods[] = {
41244129

41254130
MEMC_ME(set, arginfo_set)
41264131
MEMC_ME(setByKey, arginfo_setByKey)
4127-
#if HAVE_LIBMEMCACHED_TOUCH
4132+
#ifdef HAVE_MEMCACHED_TOUCH
41284133
MEMC_ME(touch, arginfo_touch)
41294134
MEMC_ME(touchByKey, arginfo_touchByKey)
41304135
#endif
@@ -4155,10 +4160,9 @@ static zend_function_entry memcached_class_methods[] = {
41554160
MEMC_ME(addServers, arginfo_addServers)
41564161
MEMC_ME(getServerList, arginfo_getServerList)
41574162
MEMC_ME(getServerByKey, arginfo_getServerByKey)
4158-
MEMC_ME(resetServerList, arginfo_resetServerList)
4159-
MEMC_ME(quit, arginfo_quit)
4160-
MEMC_ME(flushBuffers, arginfo_flushBuffers)
4161-
4163+
MEMC_ME(resetServerList, arginfo_resetServerList)
4164+
MEMC_ME(quit, arginfo_quit)
4165+
MEMC_ME(flushBuffers, arginfo_flushBuffers)
41624166

41634167
#if defined(LIBMEMCACHED_VERSION_HEX) && LIBMEMCACHED_VERSION_HEX >= 0x00049000
41644168
MEMC_ME(getLastErrorMessage, arginfo_getLastErrorMessage)
@@ -4346,7 +4350,7 @@ static void php_memc_register_constants(INIT_FUNC_ARGS)
43464350
REGISTER_MEMC_CLASS_CONST_LONG(OPT_NUMBER_OF_REPLICAS, MEMCACHED_BEHAVIOR_NUMBER_OF_REPLICAS);
43474351
REGISTER_MEMC_CLASS_CONST_LONG(OPT_RANDOMIZE_REPLICA_READ, MEMCACHED_BEHAVIOR_RANDOMIZE_REPLICA_READ);
43484352
#endif
4349-
#if defined(HAVE_LIBMEMCACHED_REMOVE_FAILED_SERVERS) && HAVE_LIBMEMCACHED_REMOVE_FAILED_SERVERS
4353+
#ifdef HAVE_MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS
43504354
REGISTER_MEMC_CLASS_CONST_LONG(OPT_REMOVE_FAILED_SERVERS, MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS);
43514355
#endif
43524356

Diff for: php_memcached_session.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ PS_OPEN_FUNC(memcached)
177177
} else {
178178
memc_sess->memc_sess = php_memc_create_str(p, strlen(p));
179179
if (!memc_sess->memc_sess) {
180-
#if HAVE_LIBMEMCACHED_CHECK_CONFIGURATION
180+
#ifdef HAVE_LIBMEMCACHED_CHECK_CONFIGURATION
181181
char error_buffer[1024];
182182
if (libmemcached_check_configuration(p, strlen(p), error_buffer, sizeof(error_buffer)) != MEMCACHED_SUCCESS) {
183183
php_error_docref(NULL TSRMLS_CC, E_WARNING, "session.save_path configuration error %s", error_buffer);
@@ -247,7 +247,7 @@ PS_OPEN_FUNC(memcached)
247247
php_error_docref(NULL TSRMLS_CC, E_WARNING, "failed to set memcached connection timeout");
248248
return FAILURE;
249249
}
250-
#if HAVE_LIBMEMCACHED_REMOVE_FAILED_SERVERS
250+
#ifdef HAVE_MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS
251251
/* Allow libmemcached remove failed servers */
252252
if (MEMC_G(sess_remove_failed_enabled)) {
253253
if (memcached_behavior_set(memc_sess->memc_sess, MEMCACHED_BEHAVIOR_REMOVE_FAILED_SERVERS, (uint64_t) 1) == MEMCACHED_FAILURE) {

0 commit comments

Comments
 (0)