diff options
| -rw-r--r-- | 4873.patch | 262 | ||||
| -rw-r--r-- | php-pecl-protobuf.spec | 10 | 
2 files changed, 271 insertions, 1 deletions
diff --git a/4873.patch b/4873.patch new file mode 100644 index 0000000..83e7135 --- /dev/null +++ b/4873.patch @@ -0,0 +1,262 @@ +From 3ec00a36190393f2c865c67737309391cf280b3b Mon Sep 17 00:00:00 2001 +From: Remi Collet <remi@remirepo.net> +Date: Fri, 6 Jul 2018 10:32:18 +0200 +Subject: [PATCH] fix for API change in PHP 7.3 + +--- + php/ext/google/protobuf/def.c           | 18 +++++++++--------- + php/ext/google/protobuf/encode_decode.c |  2 +- + php/ext/google/protobuf/map.c           |  6 ++++-- + php/ext/google/protobuf/message.c       |  8 ++++++++ + php/ext/google/protobuf/protobuf.c      |  9 +++++---- + php/ext/google/protobuf/protobuf.h      |  7 ++++++- + php/ext/google/protobuf/storage.c       |  6 +++--- + 7 files changed, 36 insertions(+), 20 deletions(-) + +diff --git a/php/ext/google/protobuf/def.c b/php/ext/google/protobuf/def.c +index fa33830b93..238a924789 100644 +--- a/php/ext/google/protobuf/def.c ++++ b/php/ext/google/protobuf/def.c +@@ -253,7 +253,7 @@ PHP_METHOD(Descriptor, getField) { + #else +     field_hashtable_value = +         field_descriptor_type->create_object(field_descriptor_type TSRMLS_CC); +-    --GC_REFCOUNT(field_hashtable_value); ++    GC_DELREF(field_hashtable_value); + #endif +     FieldDescriptor *field_php = +         UNBOX_HASHTABLE_VALUE(FieldDescriptor, field_hashtable_value); +@@ -264,7 +264,7 @@ PHP_METHOD(Descriptor, getField) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(field_hashtable_value, 1, 0); + #else +-  ++GC_REFCOUNT(field_hashtable_value); ++  GC_ADDREF(field_hashtable_value); +   RETURN_OBJ(field_hashtable_value); + #endif + } +@@ -492,7 +492,7 @@ PHP_METHOD(FieldDescriptor, getEnumType) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(desc, 1, 0); + #else +-  ++GC_REFCOUNT(desc); ++  GC_ADDREF(desc); +   RETURN_OBJ(desc); + #endif + } +@@ -512,7 +512,7 @@ PHP_METHOD(FieldDescriptor, getMessageType) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(desc, 1, 0); + #else +-  ++GC_REFCOUNT(desc); ++  GC_ADDREF(desc); +   RETURN_OBJ(desc); + #endif + } +@@ -585,7 +585,7 @@ PHP_METHOD(Oneof, getField) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(field_hashtable_value, 1, 0); + #else +-  ++GC_REFCOUNT(field_hashtable_value); ++  GC_ADDREF(field_hashtable_value); +   RETURN_OBJ(field_hashtable_value); + #endif + } +@@ -703,7 +703,7 @@ PHP_METHOD(DescriptorPool, getGeneratedPool) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(generated_pool_php, 1, 0); + #else +-  ++GC_REFCOUNT(generated_pool_php); ++  GC_ADDREF(generated_pool_php); +   RETURN_OBJ(generated_pool_php); + #endif + } +@@ -713,7 +713,7 @@ PHP_METHOD(InternalDescriptorPool, getGeneratedPool) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(internal_generated_pool_php, 1, 0); + #else +-  ++GC_REFCOUNT(internal_generated_pool_php); ++  GC_ADDREF(internal_generated_pool_php); +   RETURN_OBJ(internal_generated_pool_php); + #endif + } +@@ -1033,7 +1033,7 @@ PHP_METHOD(DescriptorPool, getDescriptorByClassName) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(desc, 1, 0); + #else +-  ++GC_REFCOUNT(desc); ++  GC_ADDREF(desc); +   RETURN_OBJ(desc); + #endif + } +@@ -1070,7 +1070,7 @@ PHP_METHOD(DescriptorPool, getEnumDescriptorByClassName) { + #if PHP_MAJOR_VERSION < 7 +   RETURN_ZVAL(desc, 1, 0); + #else +-  ++GC_REFCOUNT(desc); ++  GC_ADDREF(desc); +   RETURN_OBJ(desc); + #endif + } +diff --git a/php/ext/google/protobuf/encode_decode.c b/php/ext/google/protobuf/encode_decode.c +index a8c47f4d35..de13dfa890 100644 +--- a/php/ext/google/protobuf/encode_decode.c ++++ b/php/ext/google/protobuf/encode_decode.c +@@ -577,7 +577,7 @@ static void map_slot_value(upb_fieldtype_t type, const void* from, +       break; +     case UPB_TYPE_MESSAGE: +       *(zend_object**)to = Z_OBJ_P(*(zval**)from); +-      ++GC_REFCOUNT(*(zend_object**)to); ++      GC_ADDREF(*(zend_object**)to); +       break; + #endif +     default: +diff --git a/php/ext/google/protobuf/map.c b/php/ext/google/protobuf/map.c +index ab8a518a4f..c5b500b53e 100644 +--- a/php/ext/google/protobuf/map.c ++++ b/php/ext/google/protobuf/map.c +@@ -192,7 +192,8 @@ static inline void php_proto_map_string_release(void *value) { + } + static inline void php_proto_map_object_release(void *value) { +   zend_object* object = *(zend_object**)value; +-  if(--GC_REFCOUNT(object) == 0) { ++  GC_DELREF(object); ++  if(GC_REFCOUNT(object) == 0) { +     zend_objects_store_del(object); +   } + } +@@ -302,7 +303,8 @@ static bool map_index_unset(Map *intern, const char* keyval, int length) { +         zval_ptr_dtor(upb_value_memory(&old_value)); + #else +         zend_object* object = *(zend_object**)upb_value_memory(&old_value); +-        if(--GC_REFCOUNT(object) == 0) { ++        GC_DELREF(object); ++        if(GC_REFCOUNT(object) == 0) { +           zend_objects_store_del(object); +         } + #endif +diff --git a/php/ext/google/protobuf/message.c b/php/ext/google/protobuf/message.c +index e28e42a152..a40e0f635c 100644 +--- a/php/ext/google/protobuf/message.c ++++ b/php/ext/google/protobuf/message.c +@@ -869,7 +869,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Cardinality", +   zend_declare_class_constant_long(field_cardinality_type, +                                    "CARDINALITY_REPEATED", 20, 3 TSRMLS_CC); +   const char *alias = "Google\\Protobuf\\Field_Cardinality"; ++#if PHP_VERSION_ID < 70300 +   zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type TSRMLS_CC); ++#else ++  zend_register_class_alias_ex(alias, strlen(alias), field_cardinality_type, 1); ++#endif + PHP_PROTO_INIT_ENUMCLASS_END +  + // ----------------------------------------------------------------------------- +@@ -924,7 +928,11 @@ PHP_PROTO_INIT_ENUMCLASS_START("Google\\Protobuf\\Field\\Kind", +   zend_declare_class_constant_long(field_kind_type, +                                    "TYPE_SINT64", 11, 18 TSRMLS_CC); +   const char *alias = "Google\\Protobuf\\Field_Kind"; ++#if PHP_VERSION_ID < 70300 +   zend_register_class_alias_ex(alias, strlen(alias), field_kind_type TSRMLS_CC); ++#else ++  zend_register_class_alias_ex(alias, strlen(alias), field_kind_type, 1); ++#endif + PHP_PROTO_INIT_ENUMCLASS_END +  + // ----------------------------------------------------------------------------- +diff --git a/php/ext/google/protobuf/protobuf.c b/php/ext/google/protobuf/protobuf.c +index da00302f2c..19cc5efb4e 100644 +--- a/php/ext/google/protobuf/protobuf.c ++++ b/php/ext/google/protobuf/protobuf.c +@@ -104,7 +104,7 @@ void add_def_obj(const void* def, PHP_PROTO_HASHTABLE_VALUE value) { + #if PHP_MAJOR_VERSION < 7 +   Z_ADDREF_P(value); + #else +-  ++GC_REFCOUNT(value); ++  GC_ADDREF(value); + #endif +   add_to_table(upb_def_to_php_obj_map, def, value); + } +@@ -117,7 +117,7 @@ void add_ce_obj(const void* ce, PHP_PROTO_HASHTABLE_VALUE value) { + #if PHP_MAJOR_VERSION < 7 +   Z_ADDREF_P(value); + #else +-  ++GC_REFCOUNT(value); ++  GC_ADDREF(value); + #endif +   add_to_table(ce_to_php_obj_map, ce, value); + } +@@ -134,7 +134,7 @@ void add_proto_obj(const char* proto, PHP_PROTO_HASHTABLE_VALUE value) { + #if PHP_MAJOR_VERSION < 7 +   Z_ADDREF_P(value); + #else +-  ++GC_REFCOUNT(value); ++  GC_ADDREF(value); + #endif +   add_to_strtable(proto_to_php_obj_map, proto, strlen(proto), value); + } +@@ -235,7 +235,8 @@ static PHP_GSHUTDOWN_FUNCTION(protobuf) { + static void php_proto_hashtable_descriptor_release(zval* value) { +   void* ptr = Z_PTR_P(value); +   zend_object* object = *(zend_object**)ptr; +-  if(--GC_REFCOUNT(object) == 0) { ++  GC_DELREF(object); ++  if(GC_REFCOUNT(object) == 0) { +     zend_objects_store_del(object); +   } +   efree(ptr); +diff --git a/php/ext/google/protobuf/protobuf.h b/php/ext/google/protobuf/protobuf.h +index 20035ab7ff..6193b28d73 100644 +--- a/php/ext/google/protobuf/protobuf.h ++++ b/php/ext/google/protobuf/protobuf.h +@@ -46,6 +46,11 @@ + // PHP7 Wrappers + // ---------------------------------------------------------------------------- +  ++#if PHP_VERSION_ID < 70300 ++#define GC_ADDREF(h) ++GC_REFCOUNT(h) ++#define GC_DELREF(h) --GC_REFCOUNT(h) ++#endif ++ + #if PHP_MAJOR_VERSION < 7 +  + #define php_proto_zend_literal const zend_literal* +@@ -496,7 +501,7 @@ static inline int php_proto_zend_hash_get_current_data_ex(HashTable* ht, +   PHP_PROTO_HASHTABLE_VALUE WRAPPED_OBJ;                                    \ +   WRAPPED_OBJ = OBJ_CLASS_ENTRY->create_object(OBJ_CLASS_ENTRY);            \ +   OBJ = UNBOX_HASHTABLE_VALUE(OBJ_TYPE, WRAPPED_OBJ);                       \ +-  --GC_REFCOUNT(WRAPPED_OBJ); ++  GC_DELREF(WRAPPED_OBJ); +  + #define PHP_PROTO_CE_DECLARE zend_class_entry* + #define PHP_PROTO_CE_UNREF(ce) (ce) +diff --git a/php/ext/google/protobuf/storage.c b/php/ext/google/protobuf/storage.c +index e7910c85de..a60fbe393b 100644 +--- a/php/ext/google/protobuf/storage.c ++++ b/php/ext/google/protobuf/storage.c +@@ -200,7 +200,7 @@ bool native_slot_set_by_array(upb_fieldtype_t type, +       } + #else +       DEREF(memory, zval*) = value; +-      ++GC_REFCOUNT(Z_OBJ_P(value)); ++      GC_ADDREF(Z_OBJ_P(value)); + #endif +       break; +     } +@@ -251,7 +251,7 @@ bool native_slot_set_by_map(upb_fieldtype_t type, const zend_class_entry* klass, +       } + #else +       DEREF(memory, zend_object*) = Z_OBJ_P(value); +-      ++GC_REFCOUNT(Z_OBJ_P(value)); ++      GC_ADDREF(Z_OBJ_P(value)); + #endif +       break; +     } +@@ -428,7 +428,7 @@ void native_slot_get_by_map_value(upb_fieldtype_t type, const void* memory, +         ZVAL_ZVAL(CACHED_PTR_TO_ZVAL_PTR(cache), value, 1, 0); +       } + #else +-      ++GC_REFCOUNT(*(zend_object**)memory); ++      GC_ADDREF(*(zend_object**)memory); +       ZVAL_OBJ(cache, *(zend_object**)memory); + #endif +       return; diff --git a/php-pecl-protobuf.spec b/php-pecl-protobuf.spec index 27d0767..40da3a8 100644 --- a/php-pecl-protobuf.spec +++ b/php-pecl-protobuf.spec @@ -26,12 +26,14 @@  Summary:       Mechanism for serializing structured data  Name:          %{?sub_prefix}php-pecl-%{pecl_name}  Version:       3.6.0 -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;')}}  License:       BSD  Group:         Development/Languages  URL:           http://pecl.php.net/package/%{pecl_name}  Source0:       http://pecl.php.net/get/%{pecl_name}-%{version}%{?prever}.tgz +Patch0:        https://patch-diff.githubusercontent.com/raw/google/protobuf/pull/4873.patch +  BuildRequires: %{?dtsprefix}gcc  BuildRequires: %{?scl_prefix}php-devel >= 5.5.9  BuildRequires: %{?scl_prefix}php-pear @@ -97,6 +99,8 @@ sed -e 's/role="test"/role="src"/' \  cd NTS +%patch0 -p5 -b .pr4873 +  # Sanity check, really often broken  extver=$(sed -n '/#define PHP_PROTOBUF_VERSION/{s/.* "//;s/".*$//;p}' protobuf.h)  if test "x${extver}" != "x%{version}%{?prever}"; then @@ -213,6 +217,10 @@ fi  %changelog +* Fri Jul  6 2018 Remi Collet <remi@remirepo.net> - 3.6.0-2 +- add patch for PHP 7.3 from +  https://github.com/google/protobuf/pull/4873 +  * Thu Jun  7 2018 Remi Collet <remi@remirepo.net> - 3.6.0-1  - update to 3.6.0  | 
