Compare commits

...

No commits in common. 'c9' and 'c10-beta' have entirely different histories.
c9 ... c10-beta

4
.gitignore vendored

@ -1,2 +1,2 @@
SOURCES/5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081.zip
SOURCES/protobuf-3.14.0-all.tar.gz
SOURCES/googletest-5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081.tar.gz
SOURCES/protobuf-3.19.6-all.tar.gz

@ -1,2 +1,2 @@
fe843a3a69583fa23f1e77722c6d25ad3be61703 SOURCES/5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081.zip
b613ab3057c8a7400e7b7d3004824274d964a196 SOURCES/protobuf-3.14.0-all.tar.gz
006cd8087991b4ebb059570960a906fc1a4c16f4 SOURCES/googletest-5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081.tar.gz
b4a9ff2b4cfe911597e4ad08243299b81eb59fb5 SOURCES/protobuf-3.19.6-all.tar.gz

@ -1,77 +0,0 @@
diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc
index 7af37c57f3..03c4e2b516 100644
--- a/src/google/protobuf/descriptor.cc
+++ b/src/google/protobuf/descriptor.cc
@@ -1090,7 +1090,7 @@ inline void DescriptorPool::Tables::FindAllExtensions(
bool DescriptorPool::Tables::AddSymbol(const std::string& full_name,
Symbol symbol) {
- if (InsertIfNotPresent(&symbols_by_name_, full_name.c_str(), symbol)) {
+ if (InsertIfNotPresent(&symbols_by_name_, full_name, symbol)) {
symbols_after_checkpoint_.push_back(full_name.c_str());
return true;
} else {
@@ -1106,7 +1106,7 @@ bool FileDescriptorTables::AddAliasUnderParent(const void* parent,
}
bool DescriptorPool::Tables::AddFile(const FileDescriptor* file) {
- if (InsertIfNotPresent(&files_by_name_, file->name().c_str(), file)) {
+ if (InsertIfNotPresent(&files_by_name_, file->name(), file)) {
files_after_checkpoint_.push_back(file->name().c_str());
return true;
} else {
@@ -2626,6 +2626,8 @@ void Descriptor::DebugString(int depth, std::string* contents,
const Descriptor::ReservedRange* range = reserved_range(i);
if (range->end == range->start + 1) {
strings::SubstituteAndAppend(contents, "$0, ", range->start);
+ } else if (range->end > FieldDescriptor::kMaxNumber) {
+ strings::SubstituteAndAppend(contents, "$0 to max, ", range->start);
} else {
strings::SubstituteAndAppend(contents, "$0 to $1, ", range->start,
range->end - 1);
@@ -2829,6 +2831,8 @@ void EnumDescriptor::DebugString(
const EnumDescriptor::ReservedRange* range = reserved_range(i);
if (range->end == range->start) {
strings::SubstituteAndAppend(contents, "$0, ", range->start);
+ } else if (range->end == INT_MAX) {
+ strings::SubstituteAndAppend(contents, "$0 to max, ", range->start);
} else {
strings::SubstituteAndAppend(contents, "$0 to $1, ", range->start,
range->end);
@@ -4019,6 +4023,11 @@ bool DescriptorBuilder::AddSymbol(const std::string& full_name,
// Use its file as the parent instead.
if (parent == nullptr) parent = file_;
+ if (full_name.find('\0') != std::string::npos) {
+ AddError(full_name, proto, DescriptorPool::ErrorCollector::NAME,
+ "\"" + full_name + "\" contains null character.");
+ return false;
+ }
if (tables_->AddSymbol(full_name, symbol)) {
if (!file_tables_->AddAliasUnderParent(parent, name, symbol)) {
// This is only possible if there was already an error adding something of
@@ -4059,6 +4068,11 @@ bool DescriptorBuilder::AddSymbol(const std::string& full_name,
void DescriptorBuilder::AddPackage(const std::string& name,
const Message& proto,
const FileDescriptor* file) {
+ if (name.find('\0') != std::string::npos) {
+ AddError(name, proto, DescriptorPool::ErrorCollector::NAME,
+ "\"" + name + "\" contains null character.");
+ return;
+ }
if (tables_->AddSymbol(name, Symbol(file))) {
// Success. Also add parent package, if any.
std::string::size_type dot_pos = name.find_last_of('.');
@@ -4372,6 +4386,12 @@ FileDescriptor* DescriptorBuilder::BuildFileImpl(
}
result->pool_ = pool_;
+ if (result->name().find('\0') != std::string::npos) {
+ AddError(result->name(), proto, DescriptorPool::ErrorCollector::NAME,
+ "\"" + result->name() + "\" contains null character.");
+ return nullptr;
+ }
+
// Add to tables.
if (!tables_->AddFile(result)) {
AddError(proto.name(), proto, DescriptorPool::ErrorCollector::OTHER,

@ -0,0 +1,76 @@
--- src/google/protobuf/any_test.cc 2021-10-22 08:52:03.604280348 +0200
+++ src/google/protobuf/any_test.cc.orig 2021-10-22 08:51:46.935156306 +0200
@@ -60,13 +60,6 @@
EXPECT_EQ(12345, submessage.int32_value());
}
-TEST(AnyTest, TestPackFromSerializationExceedsSizeLimit) {
- protobuf_unittest::TestAny submessage;
- submessage.mutable_text()->resize(INT_MAX, 'a');
- protobuf_unittest::TestAny message;
- EXPECT_FALSE(message.mutable_any_value()->PackFrom(submessage));
-}
-
TEST(AnyTest, TestUnpackWithTypeMismatch) {
protobuf_unittest::TestAny payload;
payload.set_int32_value(13);
--- src/google/protobuf/arena_unittest.cc 2021-10-22 08:52:37.804534886 +0200
+++ src/google/protobuf/arena_unittest.cc.orig 2021-10-22 08:51:55.150217437 +0200
@@ -1341,34 +1341,6 @@
// Align n to next multiple of 8
uint64_t Align8(uint64_t n) { return (n + 7) & -8; }
-TEST(ArenaTest, SpaceAllocated_and_Used) {
- Arena arena_1;
- EXPECT_EQ(0, arena_1.SpaceAllocated());
- EXPECT_EQ(0, arena_1.SpaceUsed());
- EXPECT_EQ(0, arena_1.Reset());
- Arena::CreateArray<char>(&arena_1, 320);
- // Arena will allocate slightly more than 320 for the block headers.
- EXPECT_LE(320, arena_1.SpaceAllocated());
- EXPECT_EQ(Align8(320), arena_1.SpaceUsed());
- EXPECT_LE(320, arena_1.Reset());
-
- // Test with initial block.
- std::vector<char> arena_block(1024);
- ArenaOptions options;
- options.start_block_size = 256;
- options.max_block_size = 8192;
- options.initial_block = &arena_block[0];
- options.initial_block_size = arena_block.size();
- Arena arena_2(options);
- EXPECT_EQ(1024, arena_2.SpaceAllocated());
- EXPECT_EQ(0, arena_2.SpaceUsed());
- EXPECT_EQ(1024, arena_2.Reset());
- Arena::CreateArray<char>(&arena_2, 55);
- EXPECT_EQ(1024, arena_2.SpaceAllocated());
- EXPECT_EQ(Align8(55), arena_2.SpaceUsed());
- EXPECT_EQ(1024, arena_2.Reset());
-}
-
TEST(ArenaTest, BlockSizeDoubling) {
Arena arena;
EXPECT_EQ(0, arena.SpaceUsed());
@@ -1368,22 +1396,6 @@
}
}
-TEST(ArenaTest, BlockSizeSmallerThanAllocation) {
- for (size_t i = 0; i <= 8; ++i) {
- ArenaOptions opt;
- opt.start_block_size = opt.max_block_size = i;
- Arena arena(opt);
-
- *Arena::Create<int64_t>(&arena) = 42;
- EXPECT_GE(arena.SpaceAllocated(), 8);
- EXPECT_EQ(8, arena.SpaceUsed());
-
- *Arena::Create<int64_t>(&arena) = 42;
- EXPECT_GE(arena.SpaceAllocated(), 16);
- EXPECT_EQ(16, arena.SpaceUsed());
- }
-}
-
TEST(ArenaTest, GetArenaShouldReturnTheArenaForArenaAllocatedMessages) {
Arena arena;
ArenaMessage* message = Arena::CreateMessage<ArenaMessage>(&arena);

@ -0,0 +1,10 @@
--- protobuf-3.19.4/java/pom.xml.jre17 2022-02-13 11:45:39.367028268 +0900
+++ protobuf-3.19.4/java/pom.xml 2022-02-13 12:43:18.212542147 +0900
@@ -37,6 +37,7 @@
<test.proto.dir>src/test/proto</test.proto.dir>
<generated.sources.dir>${project.build.directory}/generated-sources</generated.sources.dir>
<generated.testsources.dir>${project.build.directory}/generated-test-sources</generated.testsources.dir>
+ <argLine>--add-opens java.base/java.lang=ALL-UNNAMED</argLine>
</properties>
<licenses>

@ -0,0 +1,135 @@
From 5576f98f5d6aa0cc1e845a5fe5d00c034ef51f30 Mon Sep 17 00:00:00 2001
From: Alexander Shadchin <alexandr.shadchin@gmail.com>
Date: Sun, 14 Aug 2022 21:13:49 +0300
Subject: [PATCH] Fix build with Python 3.11
The PyFrameObject structure members have been removed from the public C API.
---
python/google/protobuf/pyext/descriptor.cc | 75 ++++++++++++++++++----
1 file changed, 62 insertions(+), 13 deletions(-)
diff --git a/python/google/protobuf/pyext/descriptor.cc b/python/google/protobuf/pyext/descriptor.cc
index a2993d908..44d811923 100644
--- a/python/google/protobuf/pyext/descriptor.cc
+++ b/python/google/protobuf/pyext/descriptor.cc
@@ -57,6 +57,37 @@
: 0) \
: PyBytes_AsStringAndSize(ob, (charpp), (sizep)))
+#if PY_VERSION_HEX < 0x030900B1 && !defined(PYPY_VERSION)
+static PyCodeObject* PyFrame_GetCode(PyFrameObject *frame)
+{
+ Py_INCREF(frame->f_code);
+ return frame->f_code;
+}
+
+static PyFrameObject* PyFrame_GetBack(PyFrameObject *frame)
+{
+ Py_XINCREF(frame->f_back);
+ return frame->f_back;
+}
+#endif
+
+#if PY_VERSION_HEX < 0x030B00A7 && !defined(PYPY_VERSION)
+static PyObject* PyFrame_GetLocals(PyFrameObject *frame)
+{
+ if (PyFrame_FastToLocalsWithError(frame) < 0) {
+ return NULL;
+ }
+ Py_INCREF(frame->f_locals);
+ return frame->f_locals;
+}
+
+static PyObject* PyFrame_GetGlobals(PyFrameObject *frame)
+{
+ Py_INCREF(frame->f_globals);
+ return frame->f_globals;
+}
+#endif
+
namespace google {
namespace protobuf {
namespace python {
@@ -95,48 +126,66 @@ bool _CalledFromGeneratedFile(int stacklevel) {
// This check is not critical and is somewhat difficult to implement correctly
// in PyPy.
PyFrameObject* frame = PyEval_GetFrame();
+ PyCodeObject* frame_code = nullptr;
+ PyObject* frame_globals = nullptr;
+ PyObject* frame_locals = nullptr;
+ bool result = false;
+
if (frame == NULL) {
- return false;
+ goto exit;
}
+ Py_INCREF(frame);
while (stacklevel-- > 0) {
- frame = frame->f_back;
+ PyFrameObject* next_frame = PyFrame_GetBack(frame);
+ Py_DECREF(frame);
+ frame = next_frame;
if (frame == NULL) {
- return false;
+ goto exit;
}
}
- if (frame->f_code->co_filename == NULL) {
- return false;
+ frame_code = PyFrame_GetCode(frame);
+ if (frame_code->co_filename == NULL) {
+ goto exit;
}
char* filename;
Py_ssize_t filename_size;
- if (PyString_AsStringAndSize(frame->f_code->co_filename,
+ if (PyString_AsStringAndSize(frame_code->co_filename,
&filename, &filename_size) < 0) {
// filename is not a string.
PyErr_Clear();
- return false;
+ goto exit;
}
if ((filename_size < 3) ||
(strcmp(&filename[filename_size - 3], ".py") != 0)) {
// Cython's stack does not have .py file name and is not at global module
// scope.
- return true;
+ result = true;
+ goto exit;
}
if (filename_size < 7) {
// filename is too short.
- return false;
+ goto exit;
}
if (strcmp(&filename[filename_size - 7], "_pb2.py") != 0) {
// Filename is not ending with _pb2.
- return false;
+ goto exit;
}
- if (frame->f_globals != frame->f_locals) {
+ frame_globals = PyFrame_GetGlobals(frame);
+ frame_locals = PyFrame_GetLocals(frame);
+ if (frame_globals != frame_locals) {
// Not at global module scope
- return false;
+ goto exit;
}
#endif
- return true;
+ result = true;
+exit:
+ Py_XDECREF(frame_globals);
+ Py_XDECREF(frame_locals);
+ Py_XDECREF(frame_code);
+ Py_XDECREF(frame);
+ return result;
}
// If the calling code is not a _pb2.py file, raise AttributeError.
--
2.38.1

@ -0,0 +1,193 @@
.TH protoc "1" "December 2022" protoc "User Commands"
.SH NAME
protoc \- Protobuf compiler
.SH SYNOPSIS
protoc
.RI [ OPTION ]
.I PROTO_FILES
.SH DESCRIPTION
.PP
Parse
.I PROTO_FILES
and generate output based on the options given.
.SH OPTIONS
.TP
.B \-I\fIPATH\fR, \fB\-\-proto_path=\fIPATH
Specify the directory in which to search for imports.
May be specified multiple times; directories will be searched in order.
If not given, the current working directory is used.
If not found in any of the these directories, the
.B \-\-descriptor_set_in
descriptors will be checked for required proto file.
.TP
.B \-\-version
Show version info and exit.
.TP
.B \-h\fR, \fB\-\-help
Show a help message and exit.
.TP
.BI \-\-encode= MESSAGE_TYPE
Read a text-format message of the given type
from standard input and write it in binary
to standard output.
The message type must be defined in
.I PROTO_FILES
or their imports.
.TP
.B \-\-deterministic_output
When using
.BR \-\-encode ,
ensure map fields are deterministically ordered.
Note that this order is not canonical,
and changes across builds or releases of
.BR protoc (1).
.TP
.BI \-\-decode= MESSAGE_TYPE
Read a binary message of the given type
from standard input and write it in text format
to standard output.
The message type must be defined in
.I PROTO_FILES
or their imports.
.TP
.B \-\-decode_raw
Read an arbitrary protocol message
from standard input and write the raw tag/value pairs in text format
to standard output.
No
.I PROTO_FILES
should be given when using this flag.
.TP
.BI \-\-descriptor_set_in= FILES
Specifies a delimited list of
.I FILES
each containing a
.B FileDescriptorSet
(a protocol buffer defined in
.BR descriptor.proto ).
The
.B FileDescriptor
for each of the
.I PROTO_FILES
provided will be loaded from these
.BR FileDescriptorSets .
If a
.B FileDescriptor
appears multiple times, the first occurrence will be used.
.TP
.B \-o\fIFILE\fR, \fB\-\-descriptor_set_out=\fIFILE
Writes a
.B FileDescriptorSet
(a protocol buffer, defined in
.BR descriptor.proto )
containing all of the input files to
.IR FILE .
.TP
.B \-\-include_imports
When using
.BR \-\-descriptor_set_out ,
also include all dependencies of the input files in the set,
so that the set is self-contained.
.TP
.B \-\-include_source_info
When using
.BR \-\-descriptor_set_out ,
do not strip
.B SourceCodeInfo
from the
.BR FileDescriptorProto .
This results in vastly larger descriptors
that include information about the original location
of each decl in the source file
as well as surrounding comments.
.TP
.BI \-\-dependency_out= FILE
Write a dependency output file in the format expected by
.BR make (1).
This writes the transitive set of input file paths to
.I FILE
.TP
.BI \-\-error_format= FORMAT
Set the format in which to print errors.
.I FORMAT
may be
.RB \(oq gcc \(cq
(the default) or
.RP \(oq msvs \(cq
(Microsoft Visual Studio format).
.TP
.B \-\-fatal_warnings
Make warnings be fatal (similar to
.B \-Werr
in
.BR gcc (1)).
This flag will make
.BR protoc (1)
return with a non-zero exit code
if any warnings are generated.
.TP
.B \-\-print_free_field_numbers
Print the free field numbers of the messages
defined in the given proto files.
Groups share the same field number space with the parent message.
Extension ranges are counted as occupied fields numbers.
.TP
.BI \-\-plugin= EXECUTABLE
Specifies a plugin executable to use.
Normally,
.BR protoc (1)
searches the
.B PATH
for plugins, but you may specify additional executables
not in the path using this flag.
Additionally,
.I EXECUTABLE
may be of the form
.BR NAME=\fIPATH ,
in which case the given plugin name
is mapped to the given executable
even if the executable\(cqs own name differs.
.TP
.BI \-\-cpp_out= OUT_DIR
Generate C++ header and source.
.TP
.BI \-\-csharp_out= OUT_DIR
Generate C# source file.
.TP
.BI \-\-java_out= OUT_DIR
Generate Java source file.
.TP
.BI \-\-js_out= OUT_DIR
Generate JavaScript source.
.TP
.BI \-\-kotlin_out= OUT_DIR
Generate Kotlin file.
.TP
.BI \-\-objc_out= OUT_DIR
Generate Objective-C header and source.
.TP
.BI \-\-php_out= OUT_DIR
Generate PHP source file.
.TP
.BI \-\-python_out= OUT_DIR
Generate Python source file.
.TP
.BI \-\-ruby_out= OUT_DIR
Generate Ruby source file.
.TP
.BI @ <filename>
Read options and filenames from file.
If a relative file path is specified,
the file will be searched in the working directory.
The
.B \-\-proto_path
option will not affect how this argument file is searched.
Content of the file will be expanded in the position of
.BI @ <filename>
as in the argument list.
Note that shell expansion is not applied to the content of the file
(i.e., you cannot use quotes, wildcards, escapes, commands, etc.).
Each line corresponds to a single argument, even if it contains spaces.
.SH "SEE ALSO"
.BR make (1),
.BR gcc (1)

@ -1,42 +1,119 @@
# Build -python subpackage
%bcond_without python
# Build -python subpackage with C++. This significantly improves performance
# compared to the pure-Python implementation.
%bcond_without python_cpp
# Build -java subpackage
%if %{defined rhel}
%bcond_with java
%else
%bcond_without java
%endif
#global rcver rc2
# Disable LTO to work around annobin error messages
%global _lto_cflags %nil
Summary: Protocol Buffers - Google's data interchange format
Name: protobuf
Version: 3.14.0
Release: 13%{?dist}
License: BSD
# NOTE: perl-Alien-ProtoBuf has an exact-version dependency on the version of
# protobuf with which it was built; it therefore needs to be rebuilt even for
# “patch” updates of protobuf.
Version: 3.19.6
%global so_version 30
Release: 10%{?dist}
# The entire source is BSD-3-Clause, except the following files, which belong
# to the build system; are unpackaged maintainer utility scripts; or are used
# only for building tests that are not packaged—and so they do not affect the
# licenses of the binary RPMs:
#
# FSFAP:
# m4/ax_cxx_compile_stdcxx.m4
# m4/ax_prog_cc_for_build.m4
# m4/ax_prog_cxx_for_build.m4
# Apache-2.0:
# python/mox.py
# python/stubout.py
# third_party/googletest/
# except the following, which are BSD-3-Clause:
# third_party/googletest/googletest/test/gtest_pred_impl_unittest.cc
# third_party/googletest/googletest/include/gtest/gtest-param-test.h
# third_party/googletest/googletest/include/gtest/gtest-param-test.h.pump
# third_party/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h
# third_party/googletest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump
# third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h
# third_party/googletest/googletest/include/gtest/internal/gtest-type-util.h.pump
# MIT:
# conformance/third_party/jsoncpp/json.h
# conformance/third_party/jsoncpp/jsoncpp.cpp
License: BSD-3-Clause
URL: https://github.com/protocolbuffers/protobuf
Source: https://github.com/protocolbuffers/protobuf/archive/v%{version}%{?rcver}/%{name}-%{version}%{?rcver}-all.tar.gz
Source0: %{url}/archive/v%{version}%{?rcver}/protobuf-%{version}%{?rcver}-all.tar.gz
Source1: ftdetect-proto.vim
Source2: protobuf-init.el
# We bundle a copy of the exact version of gtest that is used by upstream in
# the source RPM rather than using the system copy. This is to be discouraged,
# but necessary in this case. It is not treated as a bundled library because
# it is used only at build time, and contributes nothing to the installed
# files. We take measures to verify this in %%check. See
# https://github.com/protocolbuffers/protobuf/tree/v%%{version}/third_party to
# check the correct commit hash.
%global gtest_url https://github.com/google/googletest
%global gtest_commit 5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081
%global gtest_dir googletest-%{gtest_commit}
# For tests (using exactly the same version as the release)
Source3: https://github.com/google/googletest/archive/5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081.zip
Source3: %{gtest_url}/archive/%{gtest_commit}/%{gtest_dir}.tar.gz
# Man page hand-written for Fedora in groff_man(7) format based on “protoc
# --help” output.
Source4: protoc.1
# https://github.com/protocolbuffers/protobuf/issues/8082
Patch1: protobuf-3.14-disable-IoTest.LargeOutput.patch
# Disable tests that are failing on 32bit systems
Patch2: disable-tests-on-32-bit-systems.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=2051202
# java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
# throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @12d5624a
# at com.google.protobuf.ServiceTest.testGetPrototype(ServiceTest.java:107)
Patch3: protobuf-3.19.4-jre17-add-opens.patch
# Backport upstream commit da973aff2adab60a9e516d3202c111dbdde1a50f:
# Fix build with Python 3.11
#
# The PyFrameObject structure members have been removed from the public C API.
Patch4: protobuf-3.19.4-python3.11.patch
# A bundled copy of jsoncpp is included in the conformance tests, but the
# result is not packaged, so we do not treat it as a formal bundled
# dependency—thus the virtual Provides below is commented out. The bundling is
# removed in a later release:
# Make jsoncpp a formal dependency
# https://github.com/protocolbuffers/protobuf/pull/10739
# The bundled version number is obtained from JSONCPP_VERSION_STRING in
# conformance/third_party/jsoncpp/json.h.
# Provides: bundled(jsoncpp) = 1.6.5
# Fix for CVE-2021-22570 "protobuf: Incorrect parsing of nullchar in the proto symbol leads to Nullptr dereference"
# https://bugzilla.redhat.com/show_bug.cgi?id=2050492
# Based on https://github.com/protocolbuffers/protobuf/commit/af95001202a035d78ff997e737bd67fca22ab32a
# As described in https://bugzilla.suse.com/show_bug.cgi?id=1195258
Patch2: CVE-2021-22570.patch
BuildRequires: make
BuildRequires: autoconf
BuildRequires: automake
BuildRequires: emacs
BuildRequires: gcc-c++
BuildRequires: libtool
BuildRequires: pkgconfig
BuildRequires: make
BuildRequires: gcc-c++
BuildRequires: emacs
BuildRequires: zlib-devel
%if %{with java}
%ifnarch %{java_arches}
Obsoletes: protobuf-java-util < 3.19.4-4
Obsoletes: protobuf-javadoc < 3.19.4-4
Obsoletes: protobuf-parent < 3.19.4-4
Obsoletes: protobuf-bom < 3.19.4-4
Obsoletes: protobuf-javalite < 3.19.4-4
%endif
%endif
%description
Protocol Buffers are a way of encoding structured data in an efficient
yet extensible format. Google uses Protocol Buffers for almost all of
@ -52,7 +129,7 @@ breaking deployed programs that are compiled against the "old" format.
%package compiler
Summary: Protocol Buffers compiler
Requires: %{name} = %{version}-%{release}
Requires: protobuf = %{version}-%{release}
%description compiler
This package contains Protocol Buffers compiler for all programming
@ -60,22 +137,16 @@ languages
%package devel
Summary: Protocol Buffers C++ headers and libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-compiler = %{version}-%{release}
Requires: protobuf = %{version}-%{release}
Requires: protobuf-compiler = %{version}-%{release}
Requires: zlib-devel
Requires: pkgconfig
Obsoletes: protobuf-static < 3.19.6-4
%description devel
This package contains Protocol Buffers compiler for all languages and
C++ headers and libraries
%package static
Summary: Static development files for %{name}
Requires: %{name}-devel = %{version}-%{release}
%description static
Static libraries for Protocol Buffers
%package lite
Summary: Protocol Buffers LITE_RUNTIME libraries
@ -88,8 +159,10 @@ lacks descriptors, reflection, and some other features.
%package lite-devel
Summary: Protocol Buffers LITE_RUNTIME development libraries
Requires: %{name}-devel = %{version}-%{release}
Requires: %{name}-lite = %{version}-%{release}
Requires: protobuf-devel = %{version}-%{release}
Requires: protobuf-lite = %{version}-%{release}
Obsoletes: protobuf-lite-static < 3.19.6-4
%description lite-devel
This package contains development libraries built with
@ -99,39 +172,32 @@ The "optimize_for = LITE_RUNTIME" option causes the compiler to generate code
which only depends libprotobuf-lite, which is much smaller than libprotobuf but
lacks descriptors, reflection, and some other features.
%package lite-static
Summary: Static development files for %{name}-lite
Requires: %{name}-devel = %{version}-%{release}
%description lite-static
This package contains static development libraries built with
optimize_for = LITE_RUNTIME.
The "optimize_for = LITE_RUNTIME" option causes the compiler to generate code
which only depends libprotobuf-lite, which is much smaller than libprotobuf but
lacks descriptors, reflection, and some other features.
%if %{with python}
%package -n python%{python3_pkgversion}-%{name}
Summary: Python 3 bindings for Google Protocol Buffers
%package -n python3-protobuf
Summary: Python bindings for Google Protocol Buffers
BuildRequires: python3-devel
BuildRequires: python3dist(setuptools)
BuildRequires: python3dist(wheel)
%if %{with python_cpp}
Requires: protobuf%{?_isa} = %{version}-%{release}
%else
BuildArch: noarch
BuildRequires: python%{python3_pkgversion}-devel
BuildRequires: python%{python3_pkgversion}-setuptools
BuildRequires: python%{python3_pkgversion}-wheel
Requires: python%{python3_pkgversion}-six >= 1.9
Conflicts: %{name}-compiler > %{version}
Conflicts: %{name}-compiler < %{version}
Provides: %{name}-python3 = %{version}-%{release}
%{?python_provide:%python_provide python%{python3_pkgversion}-%{name}}
%description -n python%{python3_pkgversion}-%{name}
This package contains Python 3 libraries for Google Protocol Buffers
%endif
Conflicts: protobuf-compiler > %{version}
Conflicts: protobuf-compiler < %{version}
Provides: protobuf-python3 = %{version}-%{release}
%description -n python3-protobuf
This package contains Python libraries for Google Protocol Buffers
%endif
%package vim
Summary: Vim syntax highlighting for Google Protocol Buffers descriptions
BuildArch: noarch
Requires: vim-enhanced
# We dont really need vim or vim-enhanced to be already installed in order to
# install a plugin for it. We do need to depend on vim-filesystem, which
# provides the necessary directory structure.
Requires: vim-filesystem
%description vim
This package contains syntax highlighting for Google Protocol Buffers
@ -139,21 +205,25 @@ descriptions in Vim editor
%if %{with java}
%ifarch %{java_arches}
%package java
Summary: Java Protocol Buffers runtime library
BuildArch: noarch
BuildRequires: maven-local
BuildRequires: mvn(com.google.code.gson:gson)
BuildRequires: mvn(com.google.guava:guava)
BuildRequires: mvn(com.google.guava:guava-testlib)
BuildRequires: mvn(com.google.truth:truth)
BuildRequires: mvn(junit:junit)
BuildRequires: mvn(org.apache.felix:maven-bundle-plugin)
BuildRequires: mvn(org.apache.maven.plugins:maven-antrun-plugin)
BuildRequires: mvn(org.apache.maven.plugins:maven-source-plugin)
BuildRequires: mvn(org.codehaus.mojo:build-helper-maven-plugin)
BuildRequires: mvn(org.easymock:easymock)
Conflicts: %{name}-compiler > %{version}
Conflicts: %{name}-compiler < %{version}
Obsoletes: %{name}-javanano < 3.6.0
Conflicts: protobuf-compiler > %{version}
Conflicts: protobuf-compiler < %{version}
Obsoletes: protobuf-javanano < 3.6.0
%description java
This package contains Java Protocol Buffers runtime library.
@ -174,11 +244,11 @@ Utilities to work with protos. It contains JSON support
as well as utilities to work with proto3 well-known types.
%package javadoc
Summary: Javadoc for %{name}-java
Summary: Javadoc for protobuf-java
BuildArch: noarch
%description javadoc
This package contains the API documentation for %{name}-java.
This package contains the API documentation for protobuf-java.
%package parent
Summary: Protocol Buffer Parent POM
@ -194,6 +264,7 @@ BuildArch: noarch
%description bom
Protocol Buffer BOM POM.
%endif
%endif
%package emacs
@ -207,43 +278,44 @@ This package contains syntax highlighting for Google Protocol Buffers
descriptions in the Emacs editor.
%prep
%setup -q -n %{name}-%{version}%{?rcver} -a 3
# IoTest.LargeOutput fails sometimes if not enough memory is available
%setup -q -n protobuf-%{version}%{?rcver} -a 3
%ifarch %{ix86}
# IoTest.LargeOutput fails on 32bit arches
# https://github.com/protocolbuffers/protobuf/issues/8082
%patch1 -p1
%patch2 -p1
mv googletest-5ec7f0c4a113e2f18ac2c6cc7df51ad6afc24081/* third_party/googletest/
%patch 1 -p1
# Need to disable more tests that fail on 32bit arches only
%patch 2 -p0
%endif
%patch 3 -p1 -b .jre17
%patch 4 -p1 -b .python311
# Copy in the needed gtest/gmock implementations.
%setup -q -T -D -b 3 -n protobuf-%{version}%{?rcver}
rm -rvf 'third_party/googletest'
mv '../%{gtest_dir}' 'third_party/googletest'
find -name \*.cc -o -name \*.h | xargs chmod -x
chmod 644 examples/*
%if %{with java}
%pom_remove_dep org.easymock:easymockclassextension java/pom.xml java/core/pom.xml java/lite/pom.xml java/util/pom.xml
%pom_remove_dep com.google.truth:truth java/pom.xml java/core/pom.xml java/lite/pom.xml java/util/pom.xml
%ifarch %{java_arches}
%pom_remove_dep com.google.errorprone:error_prone_annotations java/util/pom.xml
%pom_remove_dep com.google.guava:guava-testlib java/pom.xml java/util/pom.xml
# These use easymockclassextension
rm java/core/src/test/java/com/google/protobuf/ServiceTest.java
# These use truth or error_prone_annotations or guava-testlib
rm java/core/src/test/java/com/google/protobuf/LiteralByteStringTest.java
rm java/core/src/test/java/com/google/protobuf/BoundedByteStringTest.java
rm java/core/src/test/java/com/google/protobuf/RopeByteStringTest.java
rm java/core/src/test/java/com/google/protobuf/RopeByteStringSubstringTest.java
rm java/core/src/test/java/com/google/protobuf/TextFormatTest.java
rm -r java/util/src/test/java/com/google/protobuf/util
rm -r java/util/src/main/java/com/google/protobuf/util
%pom_remove_dep com.google.j2objc:j2objc-annotations java/util/pom.xml
# Remove annotation libraries we don't have
annotations=$(
find -name '*.java' |
xargs grep -h -e '^import com\.google\.errorprone\.annotation' \
-e '^import com\.google\.j2objc\.annotations' |
sort -u | sed 's/.*\.\([^.]*\);/\1/' | paste -sd\|
)
find -name '*.java' | xargs sed -ri \
"s/^import .*\.($annotations);//;s/@($annotations)"'\>\s*(\((("[^"]*")|([^)]*))\))?//g'
# Make OSGi dependency on sun.misc package optional
%pom_xpath_inject "pom:configuration/pom:instructions" "<Import-Package>sun.misc;resolution:=optional,*</Import-Package>" java/core
# Backward compatibility symlink
%mvn_file :protobuf-java:jar: %{name}/%{name}-java %{name}
# This test is incredibly slow on arm
# https://github.com/google/protobuf/issues/2389
%ifarch %{arm} s390x
mv java/core/src/test/java/com/google/protobuf/IsValidUtf8Test.java \
java/core/src/test/java/com/google/protobuf/IsValidUtf8Test.java.slow
mv java/core/src/test/java/com/google/protobuf/DecodeUtf8Test.java \
java/core/src/test/java/com/google/protobuf/DecodeUtf8Test.java.slow
%mvn_file :protobuf-java:jar: protobuf/protobuf-java protobuf
%endif
%endif
@ -254,7 +326,7 @@ iconv -f iso8859-1 -t utf-8 CONTRIBUTORS.txt > CONTRIBUTORS.txt.utf8
mv CONTRIBUTORS.txt.utf8 CONTRIBUTORS.txt
export PTHREAD_LIBS="-lpthread"
./autogen.sh
%configure
%configure --disable-static
# -Wno-error=type-limits:
# https://bugzilla.redhat.com/show_bug.cgi?id=1838470
@ -265,68 +337,69 @@ export PTHREAD_LIBS="-lpthread"
%if %{with python}
pushd python
%py3_build
%py3_build %{?with_python_cpp:-- --cpp_implementation}
popd
%endif
%if %{with java}
%ifarch s390x %{arm}
%ifarch %{java_arches}
%ifarch %{ix86} s390x
export MAVEN_OPTS=-Xmx1024m
%endif
%pom_disable_module kotlin java/pom.xml
%pom_disable_module kotlin-lite java/pom.xml
%mvn_build -s -- -f java/pom.xml
%endif
%endif
%{_emacs_bytecompile} editors/protobuf-mode.el
%check
# Java tests fail on s390x
%ifarch s390x
fail=0
%else
fail=1
%endif
%make_build check CXXFLAGS="%{build_cxxflags} -Wno-error=type-limits" || exit $fail
%make_build check CXXFLAGS="%{build_cxxflags} -Wno-error=type-limits"
%install
%make_install %{?_smp_mflags} STRIPBINARIES=no INSTALL="%{__install} -p" CPPROG="cp -p"
find %{buildroot} -type f -name "*.la" -exec rm -f {} \;
find %{buildroot} -type f -name "*.la" -exec rm -f {} +
# protoc.1 man page
install -p -m 0644 -D -t '%{buildroot}%{_mandir}/man1' '%{SOURCE4}'
%if %{with python}
pushd python
%py3_install
find %{buildroot}%{python3_sitelib} -name \*.py |
xargs sed -i -e '1{\@^#!@d}'
%py3_install %{?with_python_cpp:-- --cpp_implementation}
%if %{without python_cpp}
find %{buildroot}%{python3_sitelib} -name \*.py -exec sed -i -e '1{\@^#!@d}' {} +
%endif
popd
%endif
install -p -m 644 -D %{SOURCE1} %{buildroot}%{_datadir}/vim/vimfiles/ftdetect/proto.vim
install -p -m 644 -D editors/proto.vim %{buildroot}%{_datadir}/vim/vimfiles/syntax/proto.vim
%if %{with java}
%ifarch %{java_arches}
%mvn_install
%endif
%endif
mkdir -p %{buildroot}%{_emacs_sitelispdir}/%{name}
install -p -m 0644 editors/protobuf-mode.el %{buildroot}%{_emacs_sitelispdir}/%{name}
install -p -m 0644 editors/protobuf-mode.elc %{buildroot}%{_emacs_sitelispdir}/%{name}
mkdir -p %{buildroot}%{_emacs_sitelispdir}/protobuf
install -p -m 0644 editors/protobuf-mode.el %{buildroot}%{_emacs_sitelispdir}/protobuf
install -p -m 0644 editors/protobuf-mode.elc %{buildroot}%{_emacs_sitelispdir}/protobuf
mkdir -p %{buildroot}%{_emacs_sitestartdir}
install -p -m 0644 %{SOURCE2} %{buildroot}%{_emacs_sitestartdir}
%ldconfig_scriptlets
%ldconfig_scriptlets lite
%ldconfig_scriptlets compiler
%files
%doc CHANGES.txt CONTRIBUTORS.txt README.md
%license LICENSE
%{_libdir}/libprotobuf.so.25*
%{_libdir}/libprotobuf.so.%{so_version}{,.*}
%files compiler
%doc README.md
%license LICENSE
%{_bindir}/protoc
%{_libdir}/libprotoc.so.25*
%{_mandir}/man1/protoc.1*
%{_libdir}/libprotoc.so.%{so_version}{,.*}
%files devel
%dir %{_includedir}/google
@ -337,44 +410,51 @@ install -p -m 0644 %{SOURCE2} %{buildroot}%{_emacs_sitestartdir}
%doc examples/add_person.cc examples/addressbook.proto examples/list_people.cc examples/Makefile examples/README.md
%files emacs
%{_emacs_sitelispdir}/%{name}/
%license LICENSE
%{_emacs_sitelispdir}/protobuf/
%{_emacs_sitestartdir}/protobuf-init.el
%files static
%{_libdir}/libprotobuf.a
%{_libdir}/libprotoc.a
%files lite
%{_libdir}/libprotobuf-lite.so.25*
%license LICENSE
%{_libdir}/libprotobuf-lite.so.%{so_version}{,.*}
%files lite-devel
%{_libdir}/libprotobuf-lite.so
%{_libdir}/pkgconfig/protobuf-lite.pc
%files lite-static
%{_libdir}/libprotobuf-lite.a
%if %{with python}
%files -n python%{python3_pkgversion}-protobuf
%files -n python3-protobuf
%if %{with python_cpp}
%dir %{python3_sitearch}/google
%{python3_sitearch}/google/protobuf/
%{python3_sitearch}/protobuf-%{version}%{?rcver}-py3.*.egg-info/
%{python3_sitearch}/protobuf-%{version}%{?rcver}-py3.*-nspkg.pth
%else
%license LICENSE
%dir %{python3_sitelib}/google
%{python3_sitelib}/google/protobuf/
%{python3_sitelib}/protobuf-%{version}%{?rcver}-py3.*.egg-info/
%{python3_sitelib}/protobuf-%{version}%{?rcver}-py3.*-nspkg.pth
%endif
%doc python/README.md
%doc examples/add_person.py examples/list_people.py examples/addressbook.proto
%endif
%files vim
%license LICENSE
%{_datadir}/vim/vimfiles/ftdetect/proto.vim
%{_datadir}/vim/vimfiles/syntax/proto.vim
%if %{with java}
%ifarch %{java_arches}
%files java -f .mfiles-protobuf-java
%doc examples/AddPerson.java examples/ListPeople.java
%doc java/README.md
%license LICENSE
%files java-util -f .mfiles-protobuf-java-util
%license LICENSE
%files javadoc -f .mfiles-javadoc
%license LICENSE
@ -387,36 +467,113 @@ install -p -m 0644 %{SOURCE2} %{buildroot}%{_emacs_sitestartdir}
%files javalite -f .mfiles-protobuf-javalite
%license LICENSE
%endif
%endif
%changelog
* Wed Mar 23 2022 Adrian Reber <areber@redhat.com> - 3.14.0-13
- Rebuilt for test fixes
* Tue Aug 06 2024 Adrian Reber <areber@redhat.com> - 3.19.6-10
- copy gating.yaml from c9s
* Mon Jun 24 2024 Troy Dawson <tdawson@redhat.com> - 3.19.6-9
- Bump release for June 2024 mass rebuild
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.6-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Mar 22 2022 Adrian Reber <areber@redhat.com> - 3.14.0-12
- Rebuilt for test fixes
* Sun Jan 21 2024 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.6-7
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Tue Mar 08 2022 Adrian Reber <areber@redhat.com> - 3.14.0-11
- Applied patch for for CVE-2021-22570 (#2055641)
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.6-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Wed Feb 23 2022 Adrian Reber <areber@redhat.com> - 3.14.0-9
- Rebuilt for errata
* Tue Jun 13 2023 Python Maint <python-maint@redhat.com> - 3.19.6-5
- Rebuilt for Python 3.12
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 3.14.0-8
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Wed Apr 26 2023 Benjamin A. Beasley <code@musicinmybrain.net> - 3.19.6-4
- Stop packaging static libraries
- Stop using deprecated %%patchN syntax
* Mon Jul 26 2021 Adrian Reber <areber@redhat.com> - 3.14.0-7
- Disabled Java subpackages
* Tue Apr 25 2023 Benjamin A. Beasley <code@musicinmybrain.net> - 3.19.6-3
- Remove unnecessary explicit pkgconfig dependencies
- Remove an obsolete workaround for failing Java tests
- Remove conditionals for retired 32-bit ARM architecture
- Remove a slow-test workaround on s390x
- Reduce macro indirection in the spec file
* Thu May 06 2021 Adrian Reber <adrian@lisas.de> - 3.14.0-6
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Wed Dec 07 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 3.19.6-1
- Update to 3.19.6; fix CVE-2022-3171
* Wed Dec 07 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 3.19.5-1
- Update to 3.19.5; fix CVE-2022-1941
* Sun Dec 04 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 3.19.4-7
- Update License to SPDX
- Improved handling of gtest sources
- Update/correct gtest commit hash to match upstream
- Simplify the Source0 URL with a macro
- Drop manual dependency on python3-six, no longer needed
- Drop obsolete python_provide macro
- Drop python3_pkgversion macro
- Update summary and description to refer to “Python” instead of “Python 3”
- Re-enable compiled Python extension on Python 3.11
- Ensure all subpackages always have LICENSE, or depend on something that does
- Remove obsolete ldconfig_scriptlets macros
- The -vim subpackage now depends on vim-filesystem, no longer on vim-enhanced
- Add a man page for protoc
- Use a macro to avoid repeating the .so version, and improve .so globs
* Sun Aug 14 2022 Orion Poplawski <orion@nwra.com> - 3.19.4-6
- Build python support with C++ (bz#2107921)
* Fri Jul 22 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.4-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jul 06 2022 Benjamin A. Beasley <code@musicinmybrain.net> - 3.19.4-4
- Exclude java subpackages on non-java arches (fix RHBZ#2104092)
- Obsolete java subpackages on non-java arches
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 3.19.4-3
- Rebuilt for Python 3.11
* Sun Feb 13 2022 Mamoru TASAKA <mtasaka@fedoraproject.org> - 3.19.4-2
- Add some --add-opens option for java17
- Restrict heap usage for mvn also on %%ix86
* Mon Feb 07 2022 Orion Poplawski <orion@nwra.com> - 3.19.4-1
- Update to 3.19.4
* Sat Feb 05 2022 Jiri Vanek <jvanek@redhat.com> - 3.19.0-4
- Rebuilt for java-17-openjdk as system jdk
* Fri Jan 21 2022 Fedora Release Engineering <releng@fedoraproject.org> - 3.19.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild
* Wed Nov 10 2021 Orion Poplawski <orion@nwra.com> - 3.19.0-2
- Re-enable java
* Wed Oct 27 2021 Major Hayden <major@mhtx.net> - 3.19.0-1
- Update to 3.19.1
* Fri Oct 22 2021 Adrian Reber <adrian@lisas.de> - 3.18.1-2
- Disable tests that fail on 32bit arches
* Thu Oct 14 2021 Orion Poplawski <orion@nwra.com> - 3.18.1-1
- Update to 3.18.1
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.14.0-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Fri Jun 04 2021 Python Maint <python-maint@redhat.com> - 3.14.0-5
- Rebuilt for Python 3.10
* Thu May 06 2021 Adrian Reber <adrian@lisas.de> - 3.14.0-4
- Reintroduce the emacs subpackage to avoid file conflicts between
protobuf-compiler.x86_64 and protobuf-compiler.i686
- Disable LTO to fix annobin errors
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 3.14.0-4
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Tue Mar 30 2021 Jonathan Wakely <jwakely@redhat.com> - 3.14.0-3
- Rebuilt for removed libstdc++ symbol (#1937698)

Loading…
Cancel
Save