]> git.pld-linux.org Git - packages/protobuf.git/commitdiff
- up to 3.2.1
authorJan Rękorajski <baggins@pld-linux.org>
Mon, 17 Apr 2017 08:34:04 +0000 (10:34 +0200)
committerJan Rękorajski <baggins@pld-linux.org>
Mon, 17 Apr 2017 08:34:04 +0000 (10:34 +0200)
fix-macro-redefinitions.patch [new file with mode: 0644]
protobuf.spec

diff --git a/fix-macro-redefinitions.patch b/fix-macro-redefinitions.patch
new file mode 100644 (file)
index 0000000..29a1404
--- /dev/null
@@ -0,0 +1,140 @@
+From 416f90939d4de58fe1a4e2489120010313183291 Mon Sep 17 00:00:00 2001
+From: Feng Xiao <xfxyjwf@gmail.com>
+Date: Tue, 14 Mar 2017 23:12:52 +0000
+Subject: [PATCH] Fix freebsd build.
+
+It turns out system headers included by generated plugin.pb.h file already contains
+major/minor macro definitions when built on FreeBSD and we need to add #undefs to
+the generated header file.
+
+This change also fixes another compile error regarding EXPECT_DEATH on FreeBSD.
+---
+ src/google/protobuf/compiler/cpp/cpp_file.cc      | 46 +++++++++++++++++++++++
+ src/google/protobuf/compiler/cpp/cpp_file.h       |  9 +++++
+ src/google/protobuf/compiler/plugin.pb.h          |  6 +++
+ src/google/protobuf/stubs/stringpiece_unittest.cc |  2 +
+ 4 files changed, 63 insertions(+)
+
+diff --git a/src/google/protobuf/compiler/cpp/cpp_file.cc b/src/google/protobuf/compiler/cpp/cpp_file.cc
+index 0e5e2f1..f2e013c 100644
+--- a/src/google/protobuf/compiler/cpp/cpp_file.cc
++++ b/src/google/protobuf/compiler/cpp/cpp_file.cc
+@@ -54,6 +54,39 @@ namespace google {
+ namespace protobuf {
+ namespace compiler {
+ namespace cpp {
++namespace {
++// The list of names that are defined as macros on some platforms. We need to
++// #undef them for the generated code to compile.
++const char* kMacroNames[] = {"major", "minor"};
++
++bool IsMacroName(const string& name) {
++  // Just do a linear search as the number of elements is very small.
++  for (int i = 0; i < GOOGLE_ARRAYSIZE(kMacroNames); ++i) {
++    if (name == kMacroNames[i]) return true;
++  }
++  return false;
++}
++
++void CollectMacroNames(const Descriptor* message, vector<string>* names) {
++  for (int i = 0; i < message->field_count(); ++i) {
++    const FieldDescriptor* field = message->field(i);
++    if (IsMacroName(field->name())) {
++      names->push_back(field->name());
++    }
++  }
++  for (int i = 0; i < message->nested_type_count(); ++i) {
++    CollectMacroNames(message->nested_type(i), names);
++  }
++}
++
++void CollectMacroNames(const FileDescriptor* file, vector<string>* names) {
++  for (int i = 0; i < file->message_type_count(); ++i) {
++    CollectMacroNames(file->message_type(i), names);
++  }
++}
++
++
++}  // namespace
+ // ===================================================================
+@@ -103,10 +136,23 @@ FileGenerator::FileGenerator(const FileDescriptor* file, const Options& options)
+ FileGenerator::~FileGenerator() {}
++void FileGenerator::GenerateMacroUndefs(io::Printer* printer) {
++  vector<string> names_to_undef;
++  CollectMacroNames(file_, &names_to_undef);
++  for (int i = 0; i < names_to_undef.size(); ++i) {
++    printer->Print(
++        "#ifdef $name$\n"
++        "#undef $name$\n"
++        "#endif\n",
++        "name", names_to_undef[i]);
++  }
++}
++
+ void FileGenerator::GenerateHeader(io::Printer* printer) {
+   printer->Print(
+     "// @@protoc_insertion_point(includes)\n");
++  GenerateMacroUndefs(printer);
+   GenerateForwardDeclarations(printer);
+diff --git a/src/google/protobuf/compiler/cpp/cpp_file.h b/src/google/protobuf/compiler/cpp/cpp_file.h
+index 25d6eab..e3fbb96 100644
+--- a/src/google/protobuf/compiler/cpp/cpp_file.h
++++ b/src/google/protobuf/compiler/cpp/cpp_file.h
+@@ -133,6 +133,15 @@ class FileGenerator {
+   void GenerateProto2NamespaceEnumSpecializations(io::Printer* printer);
++  // Sometimes the names we use in a .proto file happen to be defined as macros
++  // on some platforms (e.g., macro/minor used in plugin.proto are defined as
++  // macros in sys/types.h on FreeBSD and a few other platforms). To make the
++  // generated code compile on these platforms, we either have to undef the
++  // macro for these few platforms, or rename the field name for all platforms.
++  // Since these names are part of protobuf public API, renaming is generally
++  // a breaking change so we prefer the #undef approach.
++  void GenerateMacroUndefs(io::Printer* printer);
++
+   const FileDescriptor* file_;
+   const Options options_;
+diff --git a/src/google/protobuf/compiler/plugin.pb.h b/src/google/protobuf/compiler/plugin.pb.h
+index 1b91dac..d6afb21 100644
+--- a/src/google/protobuf/compiler/plugin.pb.h
++++ b/src/google/protobuf/compiler/plugin.pb.h
+@@ -30,6 +30,12 @@
+ #include <google/protobuf/unknown_field_set.h>
+ #include <google/protobuf/descriptor.pb.h>
+ // @@protoc_insertion_point(includes)
++#ifdef major
++#undef major
++#endif
++#ifdef minor
++#undef minor
++#endif
+ namespace google {
+ namespace protobuf {
+ class DescriptorProto;
+diff --git a/src/google/protobuf/stubs/stringpiece_unittest.cc b/src/google/protobuf/stubs/stringpiece_unittest.cc
+index a52d81f..a6a8759 100644
+--- a/src/google/protobuf/stubs/stringpiece_unittest.cc
++++ b/src/google/protobuf/stubs/stringpiece_unittest.cc
+@@ -783,11 +783,13 @@ TEST(FindOneCharTest, EdgeCases) {
+   EXPECT_EQ(StringPiece::npos, a.rfind('x'));
+ }
++#ifdef PROTOBUF_HAS_DEATH_TEST
+ #ifndef NDEBUG
+ TEST(NonNegativeLenTest, NonNegativeLen) {
+   EXPECT_DEATH(StringPiece("xyz", -1), "len >= 0");
+ }
+ #endif  // ndef DEBUG
++#endif  // PROTOBUF_HAS_DEATH_TEST
+ }  // namespace
+ }  // namespace protobuf
index 4bb6d6dc8367cc1d33f69fb28f29aafbbcbe9a82..312896a0bb75170666b6e6a4e3448519c236f8e7 100644 (file)
 Summary:       Protocol Buffers - Google's data interchange format
 Summary(pl.UTF-8):     Protocol Buffers - format wymiany danych Google
 Name:          protobuf
 Summary:       Protocol Buffers - Google's data interchange format
 Summary(pl.UTF-8):     Protocol Buffers - format wymiany danych Google
 Name:          protobuf
-Version:       3.1.0
-Release:       0.1
+Version:       3.2.1
+Release:       1
 License:       BSD
 Group:         Libraries
 #Source0Download: https://github.com/google/protobuf/releases
 Source0:       https://github.com/google/protobuf/archive/v%{version}/%{name}-%{version}.tar.gz
 License:       BSD
 Group:         Libraries
 #Source0Download: https://github.com/google/protobuf/releases
 Source0:       https://github.com/google/protobuf/archive/v%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 14a532a7538551d5def317bfca41dace
+# Source0-md5: 94d3a8148c35cedd2db953245e057a67
 Source1:       ftdetect-proto.vim
 Patch0:                system-gtest.patch
 Source1:       ftdetect-proto.vim
 Patch0:                system-gtest.patch
+Patch1:                fix-macro-redefinitions.patch
 URL:           https://github.com/google/protobuf/
 BuildRequires: autoconf >= 2.59
 BuildRequires: automake >= 1:1.9
 URL:           https://github.com/google/protobuf/
 BuildRequires: autoconf >= 2.59
 BuildRequires: automake >= 1:1.9
@@ -204,6 +205,7 @@ opisów buforów protokołowych (Protocol Buffers).
 %prep
 %setup -q
 %patch0 -p1
 %prep
 %setup -q
 %patch0 -p1
+%patch1 -p1
 
 ln -s /usr/src/gmock/src/gmock*.cc src
 
 
 ln -s /usr/src/gmock/src/gmock*.cc src
 
@@ -288,17 +290,17 @@ rm -rf $RPM_BUILD_ROOT
 %doc CHANGES.txt CONTRIBUTORS.txt LICENSE README.md
 %attr(755,root,root) %{_bindir}/protoc
 %attr(755,root,root) %{_libdir}/libprotoc.so.*.*.*
 %doc CHANGES.txt CONTRIBUTORS.txt LICENSE README.md
 %attr(755,root,root) %{_bindir}/protoc
 %attr(755,root,root) %{_libdir}/libprotoc.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotoc.so.11
+%attr(755,root,root) %ghost %{_libdir}/libprotoc.so.12
 
 %files libs
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libprotobuf.so.*.*.*
 
 %files libs
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libprotobuf.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotobuf.so.11
+%attr(755,root,root) %ghost %{_libdir}/libprotobuf.so.12
 
 %files lite
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libprotobuf-lite.so.*.*.*
 
 %files lite
 %defattr(644,root,root,755)
 %attr(755,root,root) %{_libdir}/libprotobuf-lite.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotobuf-lite.so.11
+%attr(755,root,root) %ghost %{_libdir}/libprotobuf-lite.so.12
 
 %files devel
 %defattr(644,root,root,755)
 
 %files devel
 %defattr(644,root,root,755)
@@ -327,8 +329,8 @@ rm -rf $RPM_BUILD_ROOT
 %doc python/README.md
 %dir %{py_sitescriptdir}/google
 %{py_sitescriptdir}/google/protobuf
 %doc python/README.md
 %dir %{py_sitescriptdir}/google
 %{py_sitescriptdir}/google/protobuf
-%{py_sitescriptdir}/protobuf-%{version}-py*.egg-info
-%{py_sitescriptdir}/protobuf-%{version}-py*-nspkg.pth
+%{py_sitescriptdir}/protobuf-*-py*.egg-info
+%{py_sitescriptdir}/protobuf-*-py*-nspkg.pth
 %endif
 
 %if %{with python3}
 %endif
 
 %if %{with python3}
@@ -337,8 +339,8 @@ rm -rf $RPM_BUILD_ROOT
 %doc python/README.md
 %dir %{py3_sitescriptdir}/google
 %{py3_sitescriptdir}/google/protobuf
 %doc python/README.md
 %dir %{py3_sitescriptdir}/google
 %{py3_sitescriptdir}/google/protobuf
-%{py3_sitescriptdir}/protobuf-%{version}-py*.egg-info
-%{py3_sitescriptdir}/protobuf-%{version}-py*-nspkg.pth
+%{py3_sitescriptdir}/protobuf-*-py*.egg-info
+%{py3_sitescriptdir}/protobuf-*-py*-nspkg.pth
 %endif
 
 %if %{with ruby}
 %endif
 
 %if %{with ruby}
This page took 0.216351 seconds and 4 git commands to generate.