commit:     fe85ba0a6989670e9eafeda71822dddd1ef029a6
Author:     Brian Evans <grknight <AT> gentoo <DOT> org>
AuthorDate: Thu Apr 15 16:23:49 2021 +0000
Commit:     Brian Evans <grknight <AT> gentoo <DOT> org>
CommitDate: Thu Apr 15 16:23:49 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=fe85ba0a

dev-php/pecl-stomp: Add patch for PHP 8 support from upstream

Signed-off-by: Brian Evans <grknight <AT> gentoo.org>

 .../pecl-stomp/files/pecl-stomp-2.0.2-php8.patch   | 369 +++++++++++++++++++++
 dev-php/pecl-stomp/pecl-stomp-2.0.2-r1.ebuild      |   6 +-
 2 files changed, 373 insertions(+), 2 deletions(-)

diff --git a/dev-php/pecl-stomp/files/pecl-stomp-2.0.2-php8.patch 
b/dev-php/pecl-stomp/files/pecl-stomp-2.0.2-php8.patch
new file mode 100644
index 00000000000..9d38a2d7ff4
--- /dev/null
+++ b/dev-php/pecl-stomp/files/pecl-stomp-2.0.2-php8.patch
@@ -0,0 +1,369 @@
+From 13681a79d9389603d9788802f0a114671a753df1 Mon Sep 17 00:00:00 2001
+From: Remi Collet <[email protected]>
+Date: Fri, 25 Sep 2020 16:06:39 +0200
+Subject: [PATCH] Fix compatibility with PHP 8 - cleanup remaining TSRMLS
+ macros - fix read/update_property parameters - adapt test suite for exception
+ in arg. parsing - fix callback
+
+---
+ php_stomp.c                    | 38 ++++++++++++++++++++--------------
+ stomp.c                        |  6 +++---
+ stomp.h                        |  4 ++--
+ tests/003-connect/003.phpt     |  2 +-
+ tests/005-close/001.phpt       |  8 +++++--
+ tests/007-subscribe/001.phpt   |  2 +-
+ tests/008-unsubscribe/001.phpt |  2 +-
+ tests/010-timeout/001.phpt     | 24 ++++++++++++---------
+ tests/010-timeout/002.phpt     | 26 ++++++++++++++---------
+ 9 files changed, 67 insertions(+), 45 deletions(-)
+
+diff --git a/php_stomp.c b/php_stomp.c
+index 0dcefed..b99a9ff 100644
+--- a/php_stomp.c
++++ b/php_stomp.c
+@@ -97,7 +97,7 @@
+               zval _object, *object = &_object; \
+               THROW_STOMP_EXCEPTION(object, errno, msg) \
+         if (details) { \
+-            zend_update_property_string(stomp_ce_exception, object, 
"details", sizeof("details")-1, (char *) details ); \
++            zend_update_property_string(stomp_ce_exception, 
OBJ_FOR_PROP(object), "details", sizeof("details")-1, (char *) details ); \
+         } \
+     }
+ 
+@@ -107,6 +107,12 @@
+ #define STOMP_URL_STR(a) ZSTR_VAL(a)
+ #endif
+ 
++#if PHP_VERSION_ID < 80000
++#define OBJ_FOR_PROP(zv) (zv)
++#else
++#define OBJ_FOR_PROP(zv) Z_OBJ_P(zv)
++#endif
++
+ static int le_stomp;
+ static zend_object_handlers stomp_obj_handlers;
+ 
+@@ -564,7 +570,7 @@ PHP_FUNCTION(stomp_connect)
+                       zval excobj;
+                       THROW_STOMP_EXCEPTION(&excobj, stomp->errnum, 
stomp->error);
+                       if (stomp->error_details) {
+-                              zend_update_property_string(stomp_ce_exception, 
&excobj, "details", sizeof("details")-1, stomp->error_details );
++                              zend_update_property_string(stomp_ce_exception, 
OBJ_FOR_PROP(&excobj), "details", sizeof("details")-1, stomp->error_details );
+                       }
+                       return;
+               }
+@@ -578,7 +584,7 @@ PHP_FUNCTION(stomp_connect)
+                       if ((error_msg = zend_hash_str_find(res->headers, 
ZEND_STRL("message"))) != NULL) {
+                               THROW_STOMP_EXCEPTION(&excobj, 0, 
ZSTR_VAL(Z_STR_P(error_msg)));
+                               if (res->body) {
+-                                      
zend_update_property_string(stomp_ce_exception, &excobj, "details", 
sizeof("details")-1, (char *) res->body );
++                                      
zend_update_property_string(stomp_ce_exception, OBJ_FOR_PROP(&excobj), 
"details", sizeof("details")-1, (char *) res->body );
+                               }
+                       }
+                       stomp_free_frame(res);
+@@ -735,17 +741,17 @@ PHP_FUNCTION(stomp_send)
+               frame.body_length = Z_STRLEN_P(msg);
+       } else if (Z_TYPE_P(msg) == IS_OBJECT && 
instanceof_function(Z_OBJCE_P(msg), stomp_ce_frame )) {
+               zval *frame_obj_prop = NULL;
+-              frame_obj_prop = zend_read_property(stomp_ce_frame, msg, 
"command", sizeof("command")-1, 1, &rv);
++              frame_obj_prop = zend_read_property(stomp_ce_frame, 
OBJ_FOR_PROP(msg), "command", sizeof("command")-1, 1, &rv);
+               if (Z_TYPE_P(frame_obj_prop) == IS_STRING) {
+                       frame.command = Z_STRVAL_P(frame_obj_prop);
+                       frame.command_length = Z_STRLEN_P(frame_obj_prop);
+               }
+-              frame_obj_prop = zend_read_property(stomp_ce_frame, msg, 
"body", sizeof("body")-1, 1, &rv);
++              frame_obj_prop = zend_read_property(stomp_ce_frame, 
OBJ_FOR_PROP(msg), "body", sizeof("body")-1, 1, &rv);
+               if (Z_TYPE_P(frame_obj_prop) == IS_STRING) {
+                       frame.body = Z_STRVAL_P(frame_obj_prop);
+                       frame.body_length = Z_STRLEN_P(frame_obj_prop);
+               }
+-              frame_obj_prop = zend_read_property(stomp_ce_frame, msg, 
"headers", sizeof("headers")-1, 1, &rv);
++              frame_obj_prop = zend_read_property(stomp_ce_frame, 
OBJ_FOR_PROP(msg), "headers", sizeof("headers")-1, 1, &rv);
+               if (Z_TYPE_P(frame_obj_prop) == IS_ARRAY) {
+                       FRAME_HEADER_FROM_HASHTABLE(frame.headers, 
Z_ARRVAL_P(frame_obj_prop));
+               }
+@@ -930,7 +936,7 @@ PHP_FUNCTION(stomp_read_frame)
+                               zval excobj;
+                               THROW_STOMP_EXCEPTION(&excobj, 0, 
Z_STRVAL_P(error_msg));
+                               if (res->body) {
+-                                      
zend_update_property_string(stomp_ce_exception, &excobj, ZEND_STRL("details"), 
(char *)res->body );
++                                      
zend_update_property_string(stomp_ce_exception, OBJ_FOR_PROP(&excobj), 
ZEND_STRL("details"), (char *)res->body );
+                               }
+                               stomp_free_frame(res);
+                               RETURN_FALSE;
+@@ -968,10 +974,11 @@ PHP_FUNCTION(stomp_read_frame)
+                                       ZVAL_NULL(&body);
+                               }
+ 
++                              memset(&fci, 0, sizeof(fci));
++                              memset(&fcc, 0, sizeof(fcc));
+                               fci.size = sizeof(fci);
+ #if (PHP_MAJOR_VERSION == 7 && PHP_MINOR_VERSION == 0)
+                               fci.function_table = &ce->function_table;
+-                              fci.symbol_table = NULL;
+ #endif
+                               /* PARAMS */
+                               fci.param_count = 3;
+@@ -983,8 +990,9 @@ PHP_FUNCTION(stomp_read_frame)
+                               ZVAL_UNDEF(&fci.function_name);
+                               fci.object = Z_OBJ_P(return_value);
+                               fci.retval = &retval;
++#if PHP_VERSION_ID < 80000
+                               fci.no_separation = 1;
+-
++#endif
+ #if PHP_VERSION_ID < 70300
+                               fcc.initialized = 1;
+ #endif
+@@ -997,7 +1005,7 @@ PHP_FUNCTION(stomp_read_frame)
+                               fcc.object = Z_OBJ_P(return_value);
+ 
+                               if (zend_call_function(&fci, &fcc ) == FAILURE) 
{
+-                                      
zend_throw_exception_ex(zend_exception_get_default(TSRMLS_C), 0 , "Could not 
execute %s::%s()", ZSTR_VAL(ce->name), 
ZSTR_VAL(ce->constructor->common.function_name));
++                                      
zend_throw_exception_ex(zend_exception_get_default(), 0 , "Could not execute 
%s::%s()", ZSTR_VAL(ce->name), ZSTR_VAL(ce->constructor->common.function_name));
+                               } else {
+                                       zval_ptr_dtor(&retval);
+                               }
+@@ -1127,7 +1135,7 @@ static void 
_php_stomp_acknowledgment(INTERNAL_FUNCTION_PARAMETERS, char *cmd) {
+       } else if (Z_TYPE_P(msg) == IS_OBJECT && 
instanceof_function(Z_OBJCE_P(msg), stomp_ce_frame )) {
+               zval *frame_obj_prop, rv;
+ 
+-              frame_obj_prop = zend_read_property(stomp_ce_frame, msg, 
"headers", sizeof("headers")-1, 1, &rv);
++              frame_obj_prop = zend_read_property(stomp_ce_frame, 
OBJ_FOR_PROP(msg), "headers", sizeof("headers")-1, 1, &rv);
+               if (Z_TYPE_P(frame_obj_prop) == IS_ARRAY) {
+                       FRAME_HEADER_FROM_HASHTABLE(frame.headers, 
Z_ARRVAL_P(frame_obj_prop));
+               }
+@@ -1257,13 +1265,13 @@ PHP_METHOD(stompframe, __construct)
+       }
+ 
+       if (command_length > 0) {
+-              zend_update_property_stringl(stomp_ce_frame, object, "command", 
sizeof("command")-1, command, command_length );
++              zend_update_property_stringl(stomp_ce_frame, 
OBJ_FOR_PROP(object), "command", sizeof("command")-1, command, command_length );
+       }
+       if (headers) {
+-              zend_update_property(stomp_ce_frame, object, "headers", 
sizeof("headers")-1, headers );
++              zend_update_property(stomp_ce_frame, OBJ_FOR_PROP(object), 
"headers", sizeof("headers")-1, headers );
+       }
+       if (body_length > 0) {
+-              zend_update_property_stringl(stomp_ce_frame, object, "body", 
sizeof("body")-1, body, body_length );
++              zend_update_property_stringl(stomp_ce_frame, 
OBJ_FOR_PROP(object), "body", sizeof("body")-1, body, body_length );
+       }
+ }
+ /* }}} */
+@@ -1273,7 +1281,7 @@ PHP_METHOD(stompframe, __construct)
+ PHP_METHOD(stompexception, getDetails)
+ {
+       zval *object = getThis();       
+-      zval rv, *details = zend_read_property(stomp_ce_exception, object, 
"details", sizeof("details")-1, 1, &rv);
++      zval rv, *details = zend_read_property(stomp_ce_exception, 
OBJ_FOR_PROP(object), "details", sizeof("details")-1, 1, &rv);
+       RETURN_STR(zval_get_string(details));
+ }
+ /* }}} */
+diff --git a/stomp.c b/stomp.c
+index d83a4e6..6e77ede 100644
+--- a/stomp.c
++++ b/stomp.c
+@@ -36,7 +36,7 @@ extern zend_class_entry *stomp_ce_exception;
+ 
+ /* {{{ DEBUG */
+ #if PHP_DEBUG
+-static void print_stomp_frame(stomp_frame_t *frame TSRMLS_DC) {
++static void print_stomp_frame(stomp_frame_t *frame) {
+       php_printf("------ START FRAME ------\n");
+       php_printf("%s\n", frame->command);
+       /* Headers */
+@@ -188,7 +188,7 @@ int stomp_writable(stomp_t *stomp)
+ 
+ /* {{{ stomp_connect
+  */
+-int stomp_connect(stomp_t *stomp, const char *host, unsigned short port 
TSRMLS_DC)
++int stomp_connect(stomp_t *stomp, const char *host, unsigned short port)
+ {
+       char error[1024];
+       socklen_t size;
+@@ -299,7 +299,7 @@ void stomp_close(stomp_t *stomp)
+ 
+ /* {{{ stomp_send
+  */
+-int stomp_send(stomp_t *stomp, stomp_frame_t *frame TSRMLS_DC)
++int stomp_send(stomp_t *stomp, stomp_frame_t *frame)
+ {
+       smart_str buf = {0};
+ 
+diff --git a/stomp.h b/stomp.h
+index 1a422b7..e4d02b3 100644
+--- a/stomp.h
++++ b/stomp.h
+@@ -81,9 +81,9 @@ typedef struct _stomp {
+ } stomp_t;
+ 
+ stomp_t *stomp_init();
+-int stomp_connect(stomp_t *stomp, const char *host, unsigned short port 
TSRMLS_DC);
++int stomp_connect(stomp_t *stomp, const char *host, unsigned short port);
+ void stomp_close(stomp_t *stomp);
+-int stomp_send(stomp_t *connection, stomp_frame_t *frame TSRMLS_DC);
++int stomp_send(stomp_t *connection, stomp_frame_t *frame);
+ stomp_frame_t *stomp_read_frame_ex(stomp_t *connection, int use_stack);
+ int stomp_valid_receipt(stomp_t *connection, stomp_frame_t *frame);
+ int stomp_select_ex(stomp_t *connection, const long int sec, const long int 
usec);
+diff --git a/tests/003-connect/003.phpt b/tests/003-connect/003.phpt
+index b3de8d6..ba60e15 100644
+--- a/tests/003-connect/003.phpt
++++ b/tests/003-connect/003.phpt
+@@ -2,7 +2,7 @@
+ Test stomp_connect() - Test error on CONNECT
+ --SKIPIF--
+ <?php
+-include "../skipif.inc"
++include dirname(__DIR__) . "/skipif.inc";
+ ?>
+ --FILE--
+ <?php 
+diff --git a/tests/005-close/001.phpt b/tests/005-close/001.phpt
+index 0a23a59..77cc014 100644
+--- a/tests/005-close/001.phpt
++++ b/tests/005-close/001.phpt
+@@ -6,7 +6,11 @@ include dirname(__DIR__) . "/skipif.inc";
+ ?>
+ --FILE--
+ <?php 
+-stomp_close(null);
++try {
++      stomp_close(null);
++} catch (TypeError $e) {
++      echo $e->getMessage() . PHP_EOL;
++}
+ ?>
+ --EXPECTF--
+-Warning: stomp_close() expects parameter 1 to be resource, null given in %s 
on line %d
++%stomp_close()%s1%s null %s
+diff --git a/tests/007-subscribe/001.phpt b/tests/007-subscribe/001.phpt
+index 8d190dd..494471c 100644
+--- a/tests/007-subscribe/001.phpt
++++ b/tests/007-subscribe/001.phpt
+@@ -16,7 +16,7 @@ $s->subscribe('/queue/test', 'string');
+ --EXPECTF--
+ Warning: Stomp::subscribe(): Destination can not be empty in 
%s007-subscribe%c001.php on line %d
+ 
+-Fatal error: Uncaught TypeError: Argument 2 passed to Stomp::subscribe() must 
be of the type array, string given in %s007-subscribe%c001.php:%d
++Fatal error: Uncaught TypeError: %s, string given in 
%s007-subscribe%c001.php:%d
+ Stack trace:
+ #0 %s001.php(%d): Stomp->subscribe('/queue/test', 'string')
+ #1 {main}
+diff --git a/tests/008-unsubscribe/001.phpt b/tests/008-unsubscribe/001.phpt
+index c1200eb..7d1b50f 100644
+--- a/tests/008-unsubscribe/001.phpt
++++ b/tests/008-unsubscribe/001.phpt
+@@ -17,7 +17,7 @@ $s->unsubscribe('/queue/test', 'string');
+ --EXPECTF--
+ Warning: Stomp::unsubscribe(): Destination can not be empty in 
%s008-unsubscribe%c001.php on line %d
+ 
+-Fatal error: Uncaught TypeError: Argument 2 passed to Stomp::unsubscribe() 
must be of the type array, string given in %s008-unsubscribe%c001.php:%d
++Fatal error: Uncaught TypeError: %s2%s string given in 
%s008-unsubscribe%c001.php:%d
+ Stack trace:
+ #0 %s(%d): Stomp->unsubscribe('/queue/test', 'string')
+ #1 {main}
+diff --git a/tests/010-timeout/001.phpt b/tests/010-timeout/001.phpt
+index 7389f70..b9886db 100644
+--- a/tests/010-timeout/001.phpt
++++ b/tests/010-timeout/001.phpt
+@@ -25,13 +25,21 @@ var_dump($s->setReadTimeout(10, 5));
+ // Third test, read supposed to return 10.5
+ var_dump($s->getReadTimeout());
+ 
+-// Set read timout with the first param as a string, supposed to trigger a 
warning
+-var_dump($s->setReadTimeout(''));
++try {
++      // Set read timout with the first param as a string, supposed to 
trigger a warning/exception
++      var_dump($s->setReadTimeout(''));
++} catch (TypeError $e) {
++      echo $e->getMessage() . PHP_EOL;
++}
+ // Fourth test, read supposed to get the last value set : 10.5
+ var_dump($s->getReadTimeout());
+ 
+-// Set read timout with the second param as a string, supposed to trigger a 
warning
+-var_dump($s->setReadTimeout(10, ''));
++try {
++      // Set read timout with the second param as a string, supposed to 
trigger a warning/exception
++      var_dump($s->setReadTimeout(10, ''));
++} catch (TypeError $e) {
++      echo $e->getMessage() . PHP_EOL;
++}
+ // Fourth test, read supposed to get the last value set : 10.5
+ var_dump($s->getReadTimeout());
+ 
+@@ -64,18 +72,14 @@ array(2) {
+   ["usec"]=>
+   int(5)
+ }
+-
+-Warning: Stomp::setReadTimeout() expects parameter 1 to be long, string given 
in %s on line %d
+-NULL
++%AStomp::setReadTimeout()%s1%s string given%A
+ array(2) {
+   ["sec"]=>
+   int(10)
+   ["usec"]=>
+   int(5)
+ }
+-
+-Warning: Stomp::setReadTimeout() expects parameter 2 to be long, string given 
in %s on line %d
+-NULL
++%AStomp::setReadTimeout()%s2%s string given%A
+ array(2) {
+   ["sec"]=>
+   int(10)
+diff --git a/tests/010-timeout/002.phpt b/tests/010-timeout/002.phpt
+index a6a9b4a..c22dedf 100644
+--- a/tests/010-timeout/002.phpt
++++ b/tests/010-timeout/002.phpt
+@@ -25,13 +25,23 @@ var_dump(stomp_set_read_timeout($link, 10, 5));
+ // Third test, read supposed to return 10.5
+ var_dump(stomp_get_read_timeout($link));
+ 
+-// Set read timout with the first param as a string, supposed to trigger a 
warning
+-var_dump(stomp_set_read_timeout($link, ''));
++try {
++      // Set read timout with the first param as a string, supposed to 
trigger a warning on PHP 7
++      // supposed to trigger an exception on PHP 8
++      var_dump(stomp_set_read_timeout($link, ''));
++} catch (TypeError $e) {
++      echo $e->getMessage() . PHP_EOL;
++}
+ // Fourth test, read supposed to get the last value set : 10.5
+ var_dump(stomp_get_read_timeout($link));
+ 
+-// Set read timout with the second param as a string, supposed to trigger a 
warning
+-var_dump(stomp_set_read_timeout($link, 10, ''));
++try {
++      // Set read timout with the second param as a string, supposed to 
trigger a warning on PHP 7
++      // supposed to trigger an exception on PHP 8
++      var_dump(stomp_set_read_timeout($link, 10, ''));
++} catch (TypeError $e) {
++      echo $e->getMessage() . PHP_EOL;
++}
+ // Fourth test, read supposed to get the last value set : 10.5
+ var_dump(stomp_get_read_timeout($link));
+ 
+@@ -64,18 +74,14 @@ array(2) {
+   ["usec"]=>
+   int(5)
+ }
+-
+-Warning: stomp_set_read_timeout() expects parameter 2 to be long, string 
given in %s on line %d
+-NULL
++%Astomp_set_read_timeout()%s2%S string given%A
+ array(2) {
+   ["sec"]=>
+   int(10)
+   ["usec"]=>
+   int(5)
+ }
+-
+-Warning: stomp_set_read_timeout() expects parameter 3 to be long, string 
given in %s on line %d
+-NULL
++%Astomp_set_read_timeout()%s3%s string given%A
+ array(2) {
+   ["sec"]=>
+   int(10)

diff --git a/dev-php/pecl-stomp/pecl-stomp-2.0.2-r1.ebuild 
b/dev-php/pecl-stomp/pecl-stomp-2.0.2-r1.ebuild
index bc5c1a2e4ad..9a975221aa4 100644
--- a/dev-php/pecl-stomp/pecl-stomp-2.0.2-r1.ebuild
+++ b/dev-php/pecl-stomp/pecl-stomp-2.0.2-r1.ebuild
@@ -1,9 +1,9 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2021 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 EAPI=7
 
-USE_PHP="php7-2 php7-3 php7-4"
+USE_PHP="php7-3 php7-4 php8-0"
 PHP_EXT_NAME="stomp"
 PHP_EXT_NEEDED_USE="ssl(-)?"
 DOCS=( CREDITS doc/classes.php doc/functions.php )
@@ -20,6 +20,8 @@ RESTRICT="!test? ( test )"
 
 BDEPEND="virtual/pkgconfig"
 
+PATCHES=( "${FILESDIR}/pecl-stomp-2.0.2-php8.patch" )
+
 src_configure() {
        local PHP_EXT_ECONF_ARGS=(
                --enable-stomp

Reply via email to