From e4031bcc78ba92f661b257442a0fa13c5dc4b912 Mon Sep 17 00:00:00 2001 From: Changqing Li Date: Tue, 24 Jul 2018 09:34:07 +0800 Subject: protobuf-c: fix build error with protobuf 3.6.0.1 1. protoc-c depend on protobuf, from protobuf 3.6.0.1, scoped_array is removed, but protoc-c still use scoped_array, caused compile error. 2. fix compile error since missing namespace 3. from protobuf 3.6, only C++11 is supported, so set to use c++11 for protobuf-c Signed-off-by: Changqing Li Signed-off-by: Khem Raj --- ...c-fix-compile-error-with-protobuf-3.6.0.1.patch | 207 +++++++++++++++++++++ .../recipes-devtools/protobuf/protobuf-c_1.3.0.bb | 8 +- 2 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 meta-oe/recipes-devtools/protobuf/protobuf-c/0001-protobuf-c-fix-compile-error-with-protobuf-3.6.0.1.patch (limited to 'meta-oe') diff --git a/meta-oe/recipes-devtools/protobuf/protobuf-c/0001-protobuf-c-fix-compile-error-with-protobuf-3.6.0.1.patch b/meta-oe/recipes-devtools/protobuf/protobuf-c/0001-protobuf-c-fix-compile-error-with-protobuf-3.6.0.1.patch new file mode 100644 index 0000000000..e6239ee32e --- /dev/null +++ b/meta-oe/recipes-devtools/protobuf/protobuf-c/0001-protobuf-c-fix-compile-error-with-protobuf-3.6.0.1.patch @@ -0,0 +1,207 @@ +From fb77cbce29d9ea4d4acbfd6ba72cb1cffabf649a Mon Sep 17 00:00:00 2001 +From: Changqing Li +Date: Fri, 20 Jul 2018 11:47:53 +0800 +Subject: [PATCH] protobuf-c: fix compile error with protobuf 3.6.0.1 + +Upstream-Status: Backport[https://github.com/protobuf-c/protobuf-c/pull/328] + +1. protoc-c depend on protobuf, from protobuf 3.6.0.1, +scoped_array is removed, but protoc-c still use scoped_array, +caused compile error. + +2. fix compile error since missing namespace + + +Signed-off-by: Changqing Li +--- + protoc-c/c_field.cc | 2 +- + protoc-c/c_field.h | 2 +- + protoc-c/c_file.cc | 8 ++++---- + protoc-c/c_file.h | 10 +++++----- + protoc-c/c_generator.cc | 12 ++++++------ + protoc-c/c_helpers.cc | 4 +++- + protoc-c/c_message.cc | 6 +++--- + protoc-c/c_message.h | 7 ++++--- + 8 files changed, 27 insertions(+), 24 deletions(-) + +diff --git a/protoc-c/c_field.cc b/protoc-c/c_field.cc +index 9fa56ef..eaa38d2 100644 +--- a/protoc-c/c_field.cc ++++ b/protoc-c/c_field.cc +@@ -189,7 +189,7 @@ void FieldGenerator::GenerateDescriptorInitializerGeneric(io::Printer* printer, + FieldGeneratorMap::FieldGeneratorMap(const Descriptor* descriptor) + : descriptor_(descriptor), + field_generators_( +- new scoped_ptr[descriptor->field_count()]) { ++ new std::unique_ptr[descriptor->field_count()]) { + // Construct all the FieldGenerators. + for (int i = 0; i < descriptor->field_count(); i++) { + field_generators_[i].reset(MakeGenerator(descriptor->field(i))); +diff --git a/protoc-c/c_field.h b/protoc-c/c_field.h +index 91f1a03..94b2fad 100644 +--- a/protoc-c/c_field.h ++++ b/protoc-c/c_field.h +@@ -117,7 +117,7 @@ class FieldGeneratorMap { + + private: + const Descriptor* descriptor_; +- scoped_array > field_generators_; ++ std::unique_ptr[]> field_generators_; + + static FieldGenerator* MakeGenerator(const FieldDescriptor* field); + +diff --git a/protoc-c/c_file.cc b/protoc-c/c_file.cc +index 9851768..6dae516 100644 +--- a/protoc-c/c_file.cc ++++ b/protoc-c/c_file.cc +@@ -83,13 +83,13 @@ FileGenerator::FileGenerator(const FileDescriptor* file, + const string& dllexport_decl) + : file_(file), + message_generators_( +- new scoped_ptr[file->message_type_count()]), ++ new std::unique_ptr[file->message_type_count()]), + enum_generators_( +- new scoped_ptr[file->enum_type_count()]), ++ new std::unique_ptr[file->enum_type_count()]), + service_generators_( +- new scoped_ptr[file->service_count()]), ++ new std::unique_ptr[file->service_count()]), + extension_generators_( +- new scoped_ptr[file->extension_count()]) { ++ new std::unique_ptr[file->extension_count()]) { + + for (int i = 0; i < file->message_type_count(); i++) { + message_generators_[i].reset( +diff --git a/protoc-c/c_file.h b/protoc-c/c_file.h +index ed38ce4..adc2841 100644 +--- a/protoc-c/c_file.h ++++ b/protoc-c/c_file.h +@@ -98,13 +98,13 @@ class FileGenerator { + private: + const FileDescriptor* file_; + +- scoped_array > message_generators_; +- scoped_array > enum_generators_; +- scoped_array > service_generators_; +- scoped_array > extension_generators_; ++ std::unique_ptr[]> message_generators_; ++ std::unique_ptr[]> enum_generators_; ++ std::unique_ptr[]> service_generators_; ++ std::unique_ptr[]> extension_generators_; + + // E.g. if the package is foo.bar, package_parts_ is {"foo", "bar"}. +- vector package_parts_; ++ std::vector package_parts_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FileGenerator); + }; +diff --git a/protoc-c/c_generator.cc b/protoc-c/c_generator.cc +index a0d0cb6..c46cfe4 100644 +--- a/protoc-c/c_generator.cc ++++ b/protoc-c/c_generator.cc +@@ -80,13 +80,13 @@ namespace c { + // "foo=bar,baz,qux=corge" + // parses to the pairs: + // ("foo", "bar"), ("baz", ""), ("qux", "corge") +-void ParseOptions(const string& text, vector >* output) { +- vector parts; ++void ParseOptions(const string& text, std::vector >* output) { ++ std::vector parts; + SplitStringUsing(text, ",", &parts); + + for (unsigned i = 0; i < parts.size(); i++) { + string::size_type equals_pos = parts[i].find_first_of('='); +- pair value; ++ std::pair value; + if (equals_pos == string::npos) { + value.first = parts[i]; + value.second = ""; +@@ -105,7 +105,7 @@ bool CGenerator::Generate(const FileDescriptor* file, + const string& parameter, + OutputDirectory* output_directory, + string* error) const { +- vector > options; ++ std::vector > options; + ParseOptions(parameter, &options); + + // ----------------------------------------------------------------- +@@ -149,7 +149,7 @@ bool CGenerator::Generate(const FileDescriptor* file, + + // Generate header. + { +- scoped_ptr output( ++ std::unique_ptr output( + output_directory->Open(basename + ".h")); + io::Printer printer(output.get(), '$'); + file_generator.GenerateHeader(&printer); +@@ -157,7 +157,7 @@ bool CGenerator::Generate(const FileDescriptor* file, + + // Generate cc file. + { +- scoped_ptr output( ++ std::unique_ptr output( + output_directory->Open(basename + ".c")); + io::Printer printer(output.get(), '$'); + file_generator.GenerateSource(&printer); +diff --git a/protoc-c/c_helpers.cc b/protoc-c/c_helpers.cc +index b79b5b0..f4ef73d 100644 +--- a/protoc-c/c_helpers.cc ++++ b/protoc-c/c_helpers.cc +@@ -86,6 +86,8 @@ namespace c { + #pragma warning(disable:4996) + #endif + ++using std::vector; ++ + string DotsToUnderscores(const string& name) { + return StringReplace(name, ".", "_", true); + } +@@ -559,7 +561,7 @@ static int CEscapeInternal(const char* src, int src_len, char* dest, + } + string CEscape(const string& src) { + const int dest_length = src.size() * 4 + 1; // Maximum possible expansion +- scoped_array dest(new char[dest_length]); ++ std::unique_ptr dest(new char[dest_length]); + const int len = CEscapeInternal(src.data(), src.size(), + dest.get(), dest_length, false); + GOOGLE_DCHECK_GE(len, 0); +diff --git a/protoc-c/c_message.cc b/protoc-c/c_message.cc +index 6b22c71..85a946e 100755 +--- a/protoc-c/c_message.cc ++++ b/protoc-c/c_message.cc +@@ -83,11 +83,11 @@ MessageGenerator::MessageGenerator(const Descriptor* descriptor, + : descriptor_(descriptor), + dllexport_decl_(dllexport_decl), + field_generators_(descriptor), +- nested_generators_(new scoped_ptr[ ++ nested_generators_(new std::unique_ptr[ + descriptor->nested_type_count()]), +- enum_generators_(new scoped_ptr[ ++ enum_generators_(new std::unique_ptr[ + descriptor->enum_type_count()]), +- extension_generators_(new scoped_ptr[ ++ extension_generators_(new std::unique_ptr[ + descriptor->extension_count()]) { + + for (int i = 0; i < descriptor->nested_type_count(); i++) { +diff --git a/protoc-c/c_message.h b/protoc-c/c_message.h +index 8b115d1..114c2d0 100644 +--- a/protoc-c/c_message.h ++++ b/protoc-c/c_message.h +@@ -126,9 +126,10 @@ class MessageGenerator { + const Descriptor* descriptor_; + string dllexport_decl_; + FieldGeneratorMap field_generators_; +- scoped_array > nested_generators_; +- scoped_array > enum_generators_; +- scoped_array > extension_generators_; ++ ++ std::unique_ptr[]> nested_generators_; ++ std::unique_ptr[]> enum_generators_; ++ std::unique_ptr[]> extension_generators_; + + GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageGenerator); + }; +-- +2.7.4 + diff --git a/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb b/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb index 9b696906e8..209bb47e8e 100644 --- a/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb +++ b/meta-oe/recipes-devtools/protobuf/protobuf-c_1.3.0.bb @@ -15,10 +15,16 @@ DEPENDS = "protobuf-native protobuf" PV .= "+git${SRCPV}" SRCREV = "dac1a65feac4ad72f612aab99f487056fbcf5c1a" -SRC_URI = "git://github.com/protobuf-c/protobuf-c.git" +SRC_URI = "git://github.com/protobuf-c/protobuf-c.git \ + file://0001-protobuf-c-fix-compile-error-with-protobuf-3.6.0.1.patch \ +" S = "${WORKDIR}/git" +#make sure c++11 is used +CXXFLAGS += "-std=c++11" +BUILD_CXXFLAGS += "-std=c++11" + inherit autotools pkgconfig PACKAGE_BEFORE_PN = "${PN}-compiler" -- cgit 1.2.3-korg