summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--msgpack-php8.patch628
-rw-r--r--php-pecl-msgpack.spec36
3 files changed, 642 insertions, 24 deletions
diff --git a/.gitignore b/.gitignore
index 1ab5c4f..01f0400 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,7 @@
+clog
package-*.xml
*.tgz
+*.tar.bz2
*.tar.gz
*.tar.xz
*.tar.xz.asc
diff --git a/msgpack-php8.patch b/msgpack-php8.patch
new file mode 100644
index 0000000..864692a
--- /dev/null
+++ b/msgpack-php8.patch
@@ -0,0 +1,628 @@
+From e3ef2010a9ffb8bcc46a3d5a5a93ad1b048e3f96 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Wed, 15 Apr 2020 16:58:27 +0200
+Subject: [PATCH] fix build with php 8
+
+---
+ msgpack_convert.c | 20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+diff --git a/msgpack_convert.c b/msgpack_convert.c
+index c89aff5..93e55b2 100644
+--- a/msgpack_convert.c
++++ b/msgpack_convert.c
+@@ -64,7 +64,15 @@ static inline int msgpack_convert_long_to_properties(HashTable *ht, zval *object
+ *properties = NULL;
+ }
+ ZVAL_LONG(&key_zv, key_index);
++#if PHP_VERSION_ID < 80000
+ zend_std_write_property(object, &key_zv, val, NULL);
++#else
++ {
++ zend_string *key = zval_get_string(&key_zv);
++ zend_std_write_property(Z_OBJ_P(object), key, val, NULL);
++ zend_string_release(key);
++ }
++#endif
+ return SUCCESS;
+ }
+ /* }}} */
+@@ -87,7 +95,11 @@ static inline int msgpack_convert_string_to_properties(zval *object, zend_string
+ zend_update_property_ex(ce, object, key, val);
+ return_code = SUCCESS;
+ } else {
++#if PHP_VERSION_ID < 80000
+ zend_std_write_property(object, &pub_name, val, NULL);
++#else
++ zend_std_write_property(Z_OBJ_P(object), key, val, NULL);
++#endif
+ return_code = FAILURE;
+ }
+ zend_hash_add(var, Z_STR(pub_name), val);
+@@ -358,7 +370,11 @@ int msgpack_convert_object(zval *return_value, zval *tpl, zval *value) /* {{{ */
+ } ZEND_HASH_FOREACH_END();
+
+ /* index */
++#if PHP_VERSION_ID < 80000
+ properties = Z_OBJ_HT_P(return_value)->get_properties(return_value);
++#else
++ properties = Z_OBJ_HT_P(return_value)->get_properties(Z_OBJ_P(return_value));
++#endif
+ if (HASH_OF(tpl)) {
+ properties = HASH_OF(tpl);
+ }
+@@ -433,7 +449,11 @@ int msgpack_convert_object(zval *return_value, zval *tpl, zval *value) /* {{{ */
+ HashTable *properties = NULL;
+ HashPosition prop_pos;
+
++#if PHP_VERSION_ID < 80000
+ properties = Z_OBJ_HT_P(return_value)->get_properties(return_value);
++#else
++ properties = Z_OBJ_HT_P(return_value)->get_properties(Z_OBJ_P(return_value));
++#endif
+ zend_hash_internal_pointer_reset_ex(properties, &prop_pos);
+
+ if (msgpack_convert_long_to_properties(HASH_OF(return_value), return_value, &properties, &prop_pos, 0, value, NULL) != SUCCESS) {
+From f933cf5df92dbb2da8665905f1f44317f62a4765 Mon Sep 17 00:00:00 2001
+From: Michael Wallner <mike@php.net>
+Date: Fri, 31 Jul 2020 06:51:51 +0200
+Subject: [PATCH] remove interned strings optimization causing exhaustive
+ memory usage
+
+fixes #153 and possibly fixes #147
+---
+ msgpack_unpack.c | 10 +---------
+ 1 file changed, 1 insertion(+), 9 deletions(-)
+
+diff --git a/msgpack_unpack.c b/msgpack_unpack.c
+index c743078..8dc9480 100644
+--- a/msgpack_unpack.c
++++ b/msgpack_unpack.c
+@@ -12,9 +12,6 @@
+ #if PHP_VERSION_ID < 70400
+ # define zval_try_get_string zval_get_string
+ #endif
+-#if PHP_VERSION_ID < 70200
+-# define zend_string_init_interned zend_string_init
+-#endif
+
+ typedef struct {
+ zend_long used_slots;
+@@ -523,12 +520,7 @@ int msgpack_unserialize_str(msgpack_unserialize_data *unpack, const char* base,
+ ZVAL_EMPTY_STRING(*obj);
+ } else {
+ /* TODO: check malformed input? */
+- if (len < 1<<8) {
+- zend_string *zs = zend_string_init_interned(data, len, 0);
+- ZVAL_STR(*obj, zs);
+- } else {
+- ZVAL_STRINGL(*obj, data, len);
+- }
++ ZVAL_STRINGL(*obj, data, len);
+ }
+
+ return 0;
+From 780b0b457693180f5f8a82ef1aef02f23f322e03 Mon Sep 17 00:00:00 2001
+From: Remi Collet <remi@remirepo.net>
+Date: Thu, 3 Sep 2020 09:37:26 +0200
+Subject: [PATCH] more fix for PHP 8
+
+---
+ msgpack_class.c | 2 +-
+ msgpack_convert.c | 17 +++++++++--------
+ msgpack_pack.c | 4 ++--
+ msgpack_unpack.c | 8 ++++++--
+ php_msgpack.h | 6 ++++++
+ 5 files changed, 24 insertions(+), 13 deletions(-)
+
+diff --git a/msgpack_class.c b/msgpack_class.c
+index 69f3803..1b0ffe7 100644
+--- a/msgpack_class.c
++++ b/msgpack_class.c
+@@ -274,7 +274,7 @@ static ZEND_METHOD(msgpack, unpacker) /* {{{ */ {
+ ZVAL_STRING(&func_name, "__construct");
+
+ object_init_ex(return_value, msgpack_unpacker_ce);
+- call_user_function_ex(CG(function_table), return_value, &func_name, &construct_return, 1, args, 0, NULL);
++ call_user_function(CG(function_table), return_value, &func_name, &construct_return, 1, args);
+
+ zval_ptr_dtor(&func_name);
+ }
+diff --git a/msgpack_convert.c b/msgpack_convert.c
+index 93e55b2..8f9e1d0 100644
+--- a/msgpack_convert.c
++++ b/msgpack_convert.c
+@@ -36,7 +36,7 @@ static inline int msgpack_convert_long_to_properties(HashTable *ht, zval *object
+
+ if (msgpack_convert_array(&tplval, data, dataval) == SUCCESS) {
+ zend_hash_move_forward_ex(props, prop_pos);
+- zend_update_property(Z_OBJCE_P(object), object, prop_name, prop_len, &tplval);
++ zend_update_property(Z_OBJCE_P(object), OBJ_FOR_PROP(object), prop_name, prop_len, &tplval);
+ return SUCCESS;
+ }
+ return FAILURE;
+@@ -45,14 +45,14 @@ static inline int msgpack_convert_long_to_properties(HashTable *ht, zval *object
+ {
+ if (msgpack_convert_object(&tplval, data, val) == SUCCESS) {
+ zend_hash_move_forward_ex(props, prop_pos);
+- zend_update_property(Z_OBJCE_P(object), object, prop_name, prop_len, &tplval);
++ zend_update_property(Z_OBJCE_P(object), OBJ_FOR_PROP(object), prop_name, prop_len, &tplval);
+ return SUCCESS;
+ }
+ return FAILURE;
+ }
+ default:
+ zend_hash_move_forward_ex(props, prop_pos);
+- zend_update_property(Z_OBJCE_P(object), object, prop_name, prop_len, val);
++ zend_update_property(Z_OBJCE_P(object), OBJ_FOR_PROP(object), prop_name, prop_len, val);
+ return SUCCESS;
+ }
+ }
+@@ -89,10 +89,10 @@ static inline int msgpack_convert_string_to_properties(zval *object, zend_string
+ prot_name = zend_mangle_property_name("*", 1, ZSTR_VAL(key), ZSTR_LEN(key), 1);
+
+ if (zend_hash_find(propers, priv_name) != NULL) {
+- zend_update_property_ex(ce, object, key, val);
++ zend_update_property_ex(ce, OBJ_FOR_PROP(object), key, val);
+ return_code = SUCCESS;
+ } else if (zend_hash_find(propers, prot_name) != NULL) {
+- zend_update_property_ex(ce, object, key, val);
++ zend_update_property_ex(ce, OBJ_FOR_PROP(object), key, val);
+ return_code = SUCCESS;
+ } else {
+ #if PHP_VERSION_ID < 80000
+@@ -310,8 +310,9 @@ int msgpack_convert_object(zval *return_value, zval *tpl, zval *value) /* {{{ */
+ fci.retval = &retval;
+ fci.param_count = 0;
+ fci.params = &params;
++#if PHP_VERSION_ID < 80000
+ fci.no_separation = 1;
+-
++#endif
+ #if PHP_VERSION_ID < 70300
+ fcc.initialized = 1;
+ #endif
+@@ -434,10 +435,10 @@ int msgpack_convert_object(zval *return_value, zval *tpl, zval *value) /* {{{ */
+ return FAILURE;
+ }
+
+- zend_update_property_ex(ce, return_value, str_key, &nv);
++ zend_update_property_ex(ce, OBJ_FOR_PROP(return_value), str_key, &nv);
+ zval_ptr_dtor(&nv);
+ } else {
+- zend_update_property(ce, return_value, prop_name, prop_len, aryval);
++ zend_update_property(ce, OBJ_FOR_PROP(return_value), prop_name, prop_len, aryval);
+ }
+ num_key++;
+ } ZEND_HASH_FOREACH_END();
+diff --git a/msgpack_pack.c b/msgpack_pack.c
+index c5da6d9..f9d1ad0 100644
+--- a/msgpack_pack.c
++++ b/msgpack_pack.c
+@@ -223,7 +223,7 @@ static inline void msgpack_serialize_array(smart_str *buf, zval *val, HashTable
+ if (object) {
+ #if PHP_VERSION_ID >= 70400
+ if (Z_OBJ_HANDLER_P(val, get_properties_for)) {
+- ht = Z_OBJ_HANDLER_P(val, get_properties_for)(val, ZEND_PROP_PURPOSE_ARRAY_CAST);
++ ht = Z_OBJ_HANDLER_P(val, get_properties_for)(OBJ_FOR_PROP(val), ZEND_PROP_PURPOSE_ARRAY_CAST);
+ free_ht = 1;
+ } else {
+ ht = Z_OBJPROP_P(val);
+@@ -409,7 +409,7 @@ static inline void msgpack_serialize_object(smart_str *buf, zval *val, HashTable
+
+ if (ce && ce != PHP_IC_ENTRY &&
+ zend_hash_exists(&ce->function_table, sleep_zstring)) {
+- if ((res = call_user_function_ex(CG(function_table), val_noref, &fname, &retval, 0, 0, 1, NULL)) == SUCCESS) {
++ if ((res = call_user_function(CG(function_table), val_noref, &fname, &retval, 0, 0)) == SUCCESS) {
+
+ if (EG(exception)) {
+ zval_ptr_dtor(&retval);
+diff --git a/msgpack_unpack.c b/msgpack_unpack.c
+index 9ce1961..a602c52 100644
+--- a/msgpack_unpack.c
++++ b/msgpack_unpack.c
+@@ -282,7 +282,7 @@ static zend_class_entry* msgpack_unserialize_class(zval **container, zend_string
+ ZVAL_STRING(&user_func, PG(unserialize_callback_func));
+ ZVAL_STR(&args[0], class_name);
+
+- func_call_status = call_user_function_ex(CG(function_table), NULL, &user_func, &retval, 1, args, 0, NULL);
++ func_call_status = call_user_function(CG(function_table), NULL, &user_func, &retval, 1, args);
+ zval_ptr_dtor(&user_func);
+ if (func_call_status != SUCCESS) {
+ MSGPACK_WARNING("[msgpack] (%s) defined (%s) but not found",
+@@ -329,7 +329,11 @@ static zend_class_entry* msgpack_unserialize_class(zval **container, zend_string
+
+ /* store incomplete class name */
+ if (incomplete_class) {
++#if PHP_VERSION_ID < 80000
+ php_store_class_name(container_val, ZSTR_VAL(class_name), ZSTR_LEN(class_name));
++#else
++ php_store_class_name(container_val, class_name);
++#endif
+ }
+
+ return ce;
+@@ -836,7 +840,7 @@ int msgpack_unserialize_map_item(msgpack_unserialize_data *unpack, zval **contai
+ zend_hash_str_exists(&Z_OBJCE_P(container_val)->function_table, "__wakeup", sizeof("__wakeup") - 1)) {
+ zval wakeup, r;
+ ZVAL_STRING(&wakeup, "__wakeup");
+- call_user_function_ex(CG(function_table), container_val, &wakeup, &r, 0, NULL, 1, NULL);
++ call_user_function(CG(function_table), container_val, &wakeup, &r, 0, NULL);
+ zval_ptr_dtor(&r);
+ zval_ptr_dtor(&wakeup);
+ }
+diff --git a/php_msgpack.h b/php_msgpack.h
+index d5f9164..6ecd5f4 100644
+--- a/php_msgpack.h
++++ b/php_msgpack.h
+@@ -52,4 +52,10 @@ PHP_MSGPACK_API int php_msgpack_unserialize(
+ # define MSGPACK_ENDIAN_BIG_BYTE 0
+ #endif
+
++#if PHP_VERSION_ID < 80000
++# define OBJ_FOR_PROP(zv) (zv)
++#else
++# define OBJ_FOR_PROP(zv) Z_OBJ_P(zv)
++#endif
++
+ #endif /* PHP_MSGPACK_H */
+From 77368369d8c9b7a9f135d3b6aef2c26656dd4b55 Mon Sep 17 00:00:00 2001
+From: Michael Wallner <mike@php.net>
+Date: Wed, 23 Sep 2020 09:13:30 +0200
+Subject: [PATCH] msgpack_convert: fix crash on callback with PHP 8
+
+---
+ msgpack_convert.c | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/msgpack_convert.c b/msgpack_convert.c
+index 8f9e1d0..1f90ef4 100644
+--- a/msgpack_convert.c
++++ b/msgpack_convert.c
+@@ -296,28 +296,27 @@ int msgpack_convert_object(zval *return_value, zval *tpl, zval *value) /* {{{ */
+
+ /* Run the constructor if there is one */
+ if (ce->constructor && (ce->constructor->common.fn_flags & ZEND_ACC_PUBLIC)) {
+- zval retval, params, function_name;
++ zval retval;
+ zend_fcall_info fci;
+ zend_fcall_info_cache fcc;
+
++ memset(&fci, 0, sizeof(fci));
++ memset(&fcc, 0, sizeof(fcc));
++
+ fci.size = sizeof(fci);
+ #if PHP_VERSION_ID < 70100
+ fci.function_table = EG(function_table);
+- fci.symbol_table = NULL;
+ #endif
+- fci.function_name = function_name;
+ fci.object = Z_OBJ_P(return_value);
+ fci.retval = &retval;
+- fci.param_count = 0;
+- fci.params = &params;
+ #if PHP_VERSION_ID < 80000
+ fci.no_separation = 1;
+ #endif
++
+ #if PHP_VERSION_ID < 70300
+ fcc.initialized = 1;
+ #endif
+ fcc.function_handler = ce->constructor;
+-
+ #if PHP_VERSION_ID < 70100
+ fcc.calling_scope = EG(scope);
+ #else
+From 87e0424e81e9187e39b3d1e7e4d1bb47a94d95e0 Mon Sep 17 00:00:00 2001
+From: Michael Wallner <mike@php.net>
+Date: Wed, 23 Sep 2020 09:36:34 +0200
+Subject: [PATCH] tests: do not depend on ext/curl for a simple resource
+
+---
+ tests/023.phpt | 18 ++----------------
+ 1 file changed, 2 insertions(+), 16 deletions(-)
+
+diff --git a/tests/023.phpt b/tests/023.phpt
+index 442fe3d..c1c72c3 100644
+--- a/tests/023.phpt
++++ b/tests/023.phpt
+@@ -19,24 +19,10 @@ function test($type, $variable, $test) {
+ echo $test || $unserialized === null ? 'OK' : 'FAIL', PHP_EOL;
+ }
+
+-if (function_exists('curl_init')) {
+- $test = 'curl';
+- $res = curl_init('http://php.net/');
+-} else {
+- $test = 'dir';
+- $res = opendir('/tmp');
+-}
+-
++$res = opendir('/tmp');
+ test('resource', $res, false);
++closedir($res);
+
+-switch ($test) {
+- case 'curl':
+- curl_close($res);
+- break;
+- default:
+- closedir($res);
+- break;
+-}
+ ?>
+ --EXPECT--
+ resource
+From 80d82ac7b21b660501886c5b29ea1186e025de91 Mon Sep 17 00:00:00 2001
+From: Michael Wallner <mike@php.net>
+Date: Wed, 23 Sep 2020 09:53:29 +0200
+Subject: [PATCH] tests: PHP 8 somehow detects recursion earlier
+
+---
+ package.xml | 242 ++++++++++++++++++++++++------------------------
+ tests/009.phpt | 7 +-
+ tests/009a.phpt | 99 ++++++++++++++++++++
+ tests/026.phpt | 7 +-
+ tests/026a.phpt | 109 ++++++++++++++++++++++
+ 5 files changed, 336 insertions(+), 128 deletions(-)
+ create mode 100644 tests/009a.phpt
+ create mode 100644 tests/026a.phpt
+
+diff --git a/tests/009.phpt b/tests/009.phpt
+index feed76f..b917e98 100644
+--- a/tests/009.phpt
++++ b/tests/009.phpt
+@@ -2,11 +2,10 @@
+ Check for reference serialization
+ --SKIPIF--
+ <?php
+-if ((version_compare(PHP_VERSION, '5.2.13') <= 0) ||
+- (version_compare(PHP_VERSION, '5.3.0') >= 0 &&
+- version_compare(PHP_VERSION, '5.3.2') <= 0)) {
+- echo "skip tests in PHP 5.2.14/5.3.3 or newer";
++if (version_compare(PHP_VERSION, "8.0.0dev", ">=")) {
++ die("skip PHP >= 8.0\n");
+ }
++?>
+ --FILE--
+ <?php
+ if(!extension_loaded('msgpack')) {
+diff --git a/tests/009a.phpt b/tests/009a.phpt
+new file mode 100644
+index 0000000..a155604
+--- /dev/null
++++ b/tests/009a.phpt
+@@ -0,0 +1,99 @@
++--TEST--
++Check for reference serialization
++--SKIPIF--
++<?php
++if (version_compare(PHP_VERSION, "8.0.0dev", "<")) {
++ die("skip PHP < 8.0\n");
++}
++?>
++--FILE--
++<?php
++if(!extension_loaded('msgpack')) {
++ dl('msgpack.' . PHP_SHLIB_SUFFIX);
++}
++
++function test($type, $variable, $test) {
++ $serialized = msgpack_serialize($variable);
++ $unserialized = msgpack_unserialize($serialized);
++
++ echo $type, PHP_EOL;
++ echo bin2hex($serialized), PHP_EOL;
++ var_dump($unserialized);
++ echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL;
++}
++
++$a = array('foo');
++
++test('array($a, $a)', array($a, $a), false);
++test('array(&$a, &$a)', array(&$a, &$a), false);
++
++$a = array(null);
++$b = array(&$a);
++$a[0] = &$b;
++
++test('cyclic', $a, true);
++
++var_dump($a);
++var_dump(msgpack_unserialize(msgpack_serialize($a)));
++
++--EXPECT--
++array($a, $a)
++9291a3666f6f91a3666f6f
++array(2) {
++ [0]=>
++ array(1) {
++ [0]=>
++ string(3) "foo"
++ }
++ [1]=>
++ array(1) {
++ [0]=>
++ string(3) "foo"
++ }
++}
++OK
++array(&$a, &$a)
++9282c00100a3666f6f82c0020002
++array(2) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ string(3) "foo"
++ }
++ [1]=>
++ &array(1) {
++ [0]=>
++ string(3) "foo"
++ }
++}
++OK
++cyclic
++9182c0010082c0010082c0020002
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ array(1) {
++ [0]=>
++ *RECURSION*
++ }
++ }
++}
++OK
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ *RECURSION*
++ }
++}
++array(1) {
++ [0]=>
++ &array(1) {
++ [0]=>
++ array(1) {
++ [0]=>
++ *RECURSION*
++ }
++ }
++}
+diff --git a/tests/026.phpt b/tests/026.phpt
+index d89654d..ba59a71 100644
+--- a/tests/026.phpt
++++ b/tests/026.phpt
+@@ -3,11 +3,10 @@ Cyclic array test
+ --INI--
+ --SKIPIF--
+ <?php
+-if ((version_compare(PHP_VERSION, '5.2.13') <= 0) ||
+- (version_compare(PHP_VERSION, '5.3.0') >= 0 &&
+- version_compare(PHP_VERSION, '5.3.2') <= 0)) {
+- echo "skip tests in PHP 5.2.14/5.3.3 or newer";
++if (version_compare(PHP_VERSION, "8.0.0dev", ">=")) {
++ die("skip PHP >= 8.0");
+ }
++?>
+ --FILE--
+ <?php
+ if(!extension_loaded('msgpack')) {
+diff --git a/tests/026a.phpt b/tests/026a.phpt
+new file mode 100644
+index 0000000..8abc61a
+--- /dev/null
++++ b/tests/026a.phpt
+@@ -0,0 +1,109 @@
++--TEST--
++Cyclic array test
++--INI--
++--SKIPIF--
++<?php
++
++if (version_compare(PHP_VERSION, "8.0.0dev", "<")) {
++ die("skip PHP < 8.0");
++}
++?>
++--FILE--
++<?php
++if(!extension_loaded('msgpack')) {
++ dl('msgpack.' . PHP_SHLIB_SUFFIX);
++}
++
++function test($type, $variable, $test) {
++ $serialized = msgpack_serialize($variable);
++ $unserialized = msgpack_unserialize($serialized);
++
++ echo $type, PHP_EOL;
++ echo bin2hex($serialized), PHP_EOL;
++ var_dump($unserialized);
++ echo $test || $unserialized == $variable ? 'OK' : 'ERROR', PHP_EOL;
++}
++
++$a = array(
++ 'a' => array(
++ 'b' => 'c',
++ 'd' => 'e'
++ ),
++);
++
++$a['f'] = &$a;
++
++test('array', $a, true);
++
++$a = array("foo" => &$b);
++$b = array(1, 2, $a);
++var_dump($a);
++var_dump($k = msgpack_unserialize(msgpack_serialize($a)));
++
++$k["foo"][1] = "b";
++var_dump($k);
++?>
++--EXPECT--
++array
++82a16182a162a163a164a165a16683c001a16182a162a163a164a165a16682c0020003
++array(2) {
++ ["a"]=>
++ array(2) {
++ ["b"]=>
++ string(1) "c"
++ ["d"]=>
++ string(1) "e"
++ }
++ ["f"]=>
++ &array(2) {
++ ["a"]=>
++ array(2) {
++ ["b"]=>
++ string(1) "c"
++ ["d"]=>
++ string(1) "e"
++ }
++ ["f"]=>
++ *RECURSION*
++ }
++}
++OK
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ int(2)
++ [2]=>
++ *RECURSION*
++ }
++}
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ int(2)
++ [2]=>
++ array(1) {
++ ["foo"]=>
++ *RECURSION*
++ }
++ }
++}
++array(1) {
++ ["foo"]=>
++ &array(3) {
++ [0]=>
++ int(1)
++ [1]=>
++ string(1) "b"
++ [2]=>
++ array(1) {
++ ["foo"]=>
++ *RECURSION*
++ }
++ }
++}
diff --git a/php-pecl-msgpack.spec b/php-pecl-msgpack.spec
index 3c80edb..190d317 100644
--- a/php-pecl-msgpack.spec
+++ b/php-pecl-msgpack.spec
@@ -35,17 +35,18 @@
Summary: API for communicating with MessagePack serialization
Name: %{?sub_prefix}php-pecl-msgpack
+License: BSD
Version: %{upstream_version}%{?upstream_lower:~%{upstream_lower}}
+URL: https://pecl.php.net/package/msgpack
%if 0%{?gh_date:1}
Release: 0.5.%{gh_date}.%{gh_short}%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{pecl_name}-%{version}-%{gh_short}.tar.gz
%else
-Release: 1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
+Release: 2%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}}
Source: https://pecl.php.net/get/%{pecl_name}-%{upstream_version}%{?upstream_prever}.tgz
%endif
-License: BSD
-Group: Development/Languages
-URL: https://pecl.php.net/package/msgpack
+
+Patch0: %{pecl_name}-php8.patch
BuildRequires: %{?dtsprefix}gcc
BuildRequires: %{?scl_prefix}php-devel >= 7
@@ -70,31 +71,14 @@ Provides: %{?scl_prefix}php-pecl-%{pecl_name}%{?_isa} = %{version}-%{relea
%endif
%if "%{?packager}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel}
# Other third party repo stuff
-Obsoletes: php53-pecl-%{pecl_name} <= %{version}
-Obsoletes: php53u-pecl-%{pecl_name} <= %{version}
-Obsoletes: php54-pecl-%{pecl_name} <= %{version}
-Obsoletes: php54w-pecl-%{pecl_name} <= %{version}
-Obsoletes: php55u-pecl-%{pecl_name} <= %{version}
-Obsoletes: php55w-pecl-%{pecl_name} <= %{version}
-Obsoletes: php56u-pecl-%{pecl_name} <= %{version}
-Obsoletes: php56w-pecl-%{pecl_name} <= %{version}
-Obsoletes: php70u-pecl-%{pecl_name} <= %{version}
-Obsoletes: php70w-pecl-%{pecl_name} <= %{version}
-%if "%{php_version}" > "7.1"
-Obsoletes: php71u-pecl-%{pecl_name} <= %{version}
-Obsoletes: php71w-pecl-%{pecl_name} <= %{version}
-%endif
-%if "%{php_version}" > "7.2"
-Obsoletes: php72u-pecl-%{pecl_name} <= %{version}
-Obsoletes: php72w-pecl-%{pecl_name} <= %{version}
-%endif
%if "%{php_version}" > "7.3"
Obsoletes: php73-pecl-%{pecl_name} <= %{version}
-Obsoletes: php73w-pecl-%{pecl_name} <= %{version}
%endif
%if "%{php_version}" > "7.4"
Obsoletes: php74-pecl-%{pecl_name} <= %{version}
-Obsoletes: php74w-pecl-%{pecl_name} <= %{version}
+%endif
+%if "%{php_version}" > "8.0"
+Obsoletes: php80-pecl-%{pecl_name} <= %{version}
%endif
%endif
@@ -151,6 +135,7 @@ mv %{pecl_name}-%{upstream_version}%{?upstream_prever} NTS
%{?_licensedir:sed -e '/LICENSE/s/role="doc"/role="src"/' -i package.xml}
cd NTS
+%patch0 -p1 -b .up
%if %{with_msgpack}
# use system library
@@ -303,6 +288,9 @@ fi
%changelog
+* Wed Sep 23 2020 Remi Collet <remi@remirepo.net> - 2.1.1-2
+- add upstream patches for PHP 8
+
* Tue Jul 28 2020 Remi Collet <remi@remirepo.net> - 2.1.1-1
- update to 2.1.1