commit:     8ddedb2a6194622a89c003dfdb9bb2a4452ca9e8
Author:     Arfrever Frehtes Taifersar Arahesis <Arfrever <AT> Apache <DOT> Org>
AuthorDate: Fri Jul  6 21:19:50 2018 +0000
Commit:     Mike Gilbert <floppym <AT> gentoo <DOT> org>
CommitDate: Sat Jul  7 02:02:56 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=8ddedb2a

dev-libs/protobuf-c: Fix building with >=dev-libs/protobuf-3.6.0.

 .../files/protobuf-c-1.3.0-protobuf-3.6.patch      | 202 +++++++++++++++++++++
 dev-libs/protobuf-c/protobuf-c-1.3.0-r1.ebuild     |   5 +-
 2 files changed, 206 insertions(+), 1 deletion(-)

diff --git a/dev-libs/protobuf-c/files/protobuf-c-1.3.0-protobuf-3.6.patch 
b/dev-libs/protobuf-c/files/protobuf-c-1.3.0-protobuf-3.6.patch
new file mode 100644
index 00000000000..d6d8ffe9325
--- /dev/null
+++ b/dev-libs/protobuf-c/files/protobuf-c-1.3.0-protobuf-3.6.patch
@@ -0,0 +1,202 @@
+https://github.com/protobuf-c/protobuf-c/pull/309
+https://github.com/protobuf-c/protobuf-c/pull/328
+
+--- /protoc-c/c_field.cc
++++ /protoc-c/c_field.cc
+@@ -189,7 +189,7 @@
+ FieldGeneratorMap::FieldGeneratorMap(const Descriptor* descriptor)
+   : descriptor_(descriptor),
+     field_generators_(
+-      new scoped_ptr<FieldGenerator>[descriptor->field_count()]) {
++      new std::unique_ptr<FieldGenerator>[descriptor->field_count()]) {
+   // Construct all the FieldGenerators.
+   for (int i = 0; i < descriptor->field_count(); i++) {
+     field_generators_[i].reset(MakeGenerator(descriptor->field(i)));
+--- /protoc-c/c_field.h
++++ /protoc-c/c_field.h
+@@ -117,7 +117,7 @@
+ 
+  private:
+   const Descriptor* descriptor_;
+-  scoped_array<scoped_ptr<FieldGenerator> > field_generators_;
++  std::unique_ptr<std::unique_ptr<FieldGenerator>[] > field_generators_;
+ 
+   static FieldGenerator* MakeGenerator(const FieldDescriptor* field);
+ 
+--- /protoc-c/c_file.cc
++++ /protoc-c/c_file.cc
+@@ -83,13 +83,13 @@
+                              const string& dllexport_decl)
+   : file_(file),
+     message_generators_(
+-      new scoped_ptr<MessageGenerator>[file->message_type_count()]),
++      new std::unique_ptr<MessageGenerator>[file->message_type_count()]),
+     enum_generators_(
+-      new scoped_ptr<EnumGenerator>[file->enum_type_count()]),
++      new std::unique_ptr<EnumGenerator>[file->enum_type_count()]),
+     service_generators_(
+-      new scoped_ptr<ServiceGenerator>[file->service_count()]),
++      new std::unique_ptr<ServiceGenerator>[file->service_count()]),
+     extension_generators_(
+-      new scoped_ptr<ExtensionGenerator>[file->extension_count()]) {
++      new std::unique_ptr<ExtensionGenerator>[file->extension_count()]) {
+ 
+   for (int i = 0; i < file->message_type_count(); i++) {
+     message_generators_[i].reset(
+--- /protoc-c/c_file.h
++++ /protoc-c/c_file.h
+@@ -98,13 +98,13 @@
+  private:
+   const FileDescriptor* file_;
+ 
+-  scoped_array<scoped_ptr<MessageGenerator> > message_generators_;
+-  scoped_array<scoped_ptr<EnumGenerator> > enum_generators_;
+-  scoped_array<scoped_ptr<ServiceGenerator> > service_generators_;
+-  scoped_array<scoped_ptr<ExtensionGenerator> > extension_generators_;
++  std::unique_ptr<std::unique_ptr<MessageGenerator>[] > message_generators_;
++  std::unique_ptr<std::unique_ptr<EnumGenerator>[] > enum_generators_;
++  std::unique_ptr<std::unique_ptr<ServiceGenerator>[] > service_generators_;
++  std::unique_ptr<std::unique_ptr<ExtensionGenerator>[] > 
extension_generators_;
+ 
+   // E.g. if the package is foo.bar, package_parts_ is {"foo", "bar"}.
+-  vector<string> package_parts_;
++  std::vector<string> package_parts_;
+ 
+   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator);
+ };
+--- /protoc-c/c_generator.cc
++++ /protoc-c/c_generator.cc
+@@ -80,13 +80,13 @@
+ //   "foo=bar,baz,qux=corge"
+ // parses to the pairs:
+ //   ("foo", "bar"), ("baz", ""), ("qux", "corge")
+-void ParseOptions(const string& text, vector<pair<string, string> >* output) {
+-  vector<string> parts;
++void ParseOptions(const string& text, std::vector<std::pair<string, string> 
>* output) {
++  std::vector<string> parts;
+   SplitStringUsing(text, ",", &parts);
+ 
+   for (unsigned i = 0; i < parts.size(); i++) {
+     string::size_type equals_pos = parts[i].find_first_of('=');
+-    pair<string, string> value;
++    std::pair<string, string> value;
+     if (equals_pos == string::npos) {
+       value.first = parts[i];
+       value.second = "";
+@@ -105,7 +105,7 @@
+                             const string& parameter,
+                             OutputDirectory* output_directory,
+                             string* error) const {
+-  vector<pair<string, string> > options;
++  std::vector<std::pair<string, string> > options;
+   ParseOptions(parameter, &options);
+ 
+   // -----------------------------------------------------------------
+@@ -149,7 +149,7 @@
+ 
+   // Generate header.
+   {
+-    scoped_ptr<io::ZeroCopyOutputStream> output(
++    std::unique_ptr<io::ZeroCopyOutputStream> output(
+       output_directory->Open(basename + ".h"));
+     io::Printer printer(output.get(), '$');
+     file_generator.GenerateHeader(&printer);
+@@ -157,7 +157,7 @@
+ 
+   // Generate cc file.
+   {
+-    scoped_ptr<io::ZeroCopyOutputStream> output(
++    std::unique_ptr<io::ZeroCopyOutputStream> output(
+       output_directory->Open(basename + ".c"));
+     io::Printer printer(output.get(), '$');
+     file_generator.GenerateSource(&printer);
+--- /protoc-c/c_helpers.cc
++++ /protoc-c/c_helpers.cc
+@@ -177,7 +177,7 @@
+ }
+ 
+ string FullNameToLower(const string &full_name) {
+-  vector<string> pieces;
++  std::vector<string> pieces;
+   SplitStringUsing(full_name, ".", &pieces);
+   string rv = "";
+   for (unsigned i = 0; i < pieces.size(); i++) {
+@@ -188,7 +188,7 @@
+   return rv;
+ }
+ string FullNameToUpper(const string &full_name) {
+-  vector<string> pieces;
++  std::vector<string> pieces;
+   SplitStringUsing(full_name, ".", &pieces);
+   string rv = "";
+   for (unsigned i = 0; i < pieces.size(); i++) {
+@@ -199,7 +199,7 @@
+   return rv;
+ }
+ string FullNameToC(const string &full_name) {
+-  vector<string> pieces;
++  std::vector<string> pieces;
+   SplitStringUsing(full_name, ".", &pieces);
+   string rv = "";
+   for (unsigned i = 0; i < pieces.size(); i++) {
+@@ -214,7 +214,7 @@
+ {
+    if (!comment.empty())
+    {
+-      vector<string> comment_lines;
++      std::vector<string> comment_lines;
+       SplitStringUsing (comment, "\r\n", &comment_lines);
+       printer->Print ("/*\n");
+       for (int i = 0; i < comment_lines.size(); i++)
+@@ -503,8 +503,8 @@
+ 
+ void SplitStringUsing(const string& full,
+                       const char* delim,
+-                      vector<string>* result) {
+-  std::back_insert_iterator< vector<string> > it(*result);
++                      std::vector<string>* result) {
++  std::back_insert_iterator< std::vector<string> > it(*result);
+   SplitStringToIteratorUsing(full, delim, it);
+ }
+ 
+@@ -559,7 +559,7 @@
+ }
+ string CEscape(const string& src) {
+   const int dest_length = src.size() * 4 + 1; // Maximum possible expansion
+-  scoped_array<char> dest(new char[dest_length]);
++  std::unique_ptr<char[]> dest(new char[dest_length]);
+   const int len = CEscapeInternal(src.data(), src.size(),
+                                   dest.get(), dest_length, false);
+   GOOGLE_DCHECK_GE(len, 0);
+--- /protoc-c/c_message.cc
++++ /protoc-c/c_message.cc
+@@ -83,11 +83,11 @@
+   : descriptor_(descriptor),
+     dllexport_decl_(dllexport_decl),
+     field_generators_(descriptor),
+-    nested_generators_(new scoped_ptr<MessageGenerator>[
++    nested_generators_(new std::unique_ptr<MessageGenerator>[
+       descriptor->nested_type_count()]),
+-    enum_generators_(new scoped_ptr<EnumGenerator>[
++    enum_generators_(new std::unique_ptr<EnumGenerator>[
+       descriptor->enum_type_count()]),
+-    extension_generators_(new scoped_ptr<ExtensionGenerator>[
++    extension_generators_(new std::unique_ptr<ExtensionGenerator>[
+       descriptor->extension_count()]) {
+ 
+   for (int i = 0; i < descriptor->nested_type_count(); i++) {
+--- /protoc-c/c_message.h
++++ /protoc-c/c_message.h
+@@ -126,9 +126,9 @@
+   const Descriptor* descriptor_;
+   string dllexport_decl_;
+   FieldGeneratorMap field_generators_;
+-  scoped_array<scoped_ptr<MessageGenerator> > nested_generators_;
+-  scoped_array<scoped_ptr<EnumGenerator> > enum_generators_;
+-  scoped_array<scoped_ptr<ExtensionGenerator> > extension_generators_;
++  std::unique_ptr<std::unique_ptr<MessageGenerator>[] > nested_generators_;
++  std::unique_ptr<std::unique_ptr<EnumGenerator>[] > enum_generators_;
++  std::unique_ptr<std::unique_ptr<ExtensionGenerator>[] > 
extension_generators_;
+ 
+   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageGenerator);
+ };

diff --git a/dev-libs/protobuf-c/protobuf-c-1.3.0-r1.ebuild 
b/dev-libs/protobuf-c/protobuf-c-1.3.0-r1.ebuild
index 1d5c6ad3dce..260f81c9689 100644
--- a/dev-libs/protobuf-c/protobuf-c-1.3.0-r1.ebuild
+++ b/dev-libs/protobuf-c/protobuf-c-1.3.0-r1.ebuild
@@ -23,7 +23,10 @@ DEPEND="${RDEPEND}
        test? ( ${AUTOTOOLS_DEPEND} )
        virtual/pkgconfig[${MULTILIB_USEDEP}]"
 
-PATCHES=( "${FILESDIR}"/${PN}-1.3.0-restore-protobuf-2-compatibility.patch )
+PATCHES=(
+       "${FILESDIR}/${P}-restore-protobuf-2-compatibility.patch"
+       "${FILESDIR}/${P}-protobuf-3.6.patch"
+)
 
 S="${WORKDIR}/${MY_P}"
 

Reply via email to