# TODO:
-# - add bindings for java
+# - add bindings for java (maven build)
+# - add bindings for javascript
+# - add bindings for csharp
#
# Conditional build:
-#
-%bcond_without python # Python bindings
+%bcond_without python2 # Python 2.x bindings
+%bcond_without python3 # Python 3.x bindings
+%bcond_without ruby # Ruby bindings
+%bcond_without tests # perform "make check" (requires 4+GB RAM on 64-bit archs)
Summary: Protocol Buffers - Google's data interchange format
Summary(pl.UTF-8): Protocol Buffers - format wymiany danych Google
Name: protobuf
-Version: 2.4.1
-Release: 2
+Version: 3.14.0
+Release: 5
License: BSD
Group: Libraries
-Source0: http://protobuf.googlecode.com/files/%{name}-%{version}.tar.bz2
-# Source0-md5: ed436802019c9e1f40cc750eaf78f318
+#Source0Download: https://github.com/google/protobuf/releases
+Source0: https://github.com/google/protobuf/releases/download/v%{version}/%{name}-all-%{version}.tar.gz
+# Source0-md5: d0a7dd930210af5285c08c8a2c2304ab
Source1: ftdetect-proto.vim
-URL: http://code.google.com/p/protobuf/
-BuildRequires: autoconf
-BuildRequires: rpmbuild(macros) >= 1.219
-BuildRequires: automake
-BuildRequires: libstdc++-devel
+Patch0: system-gtest.patch
+Patch1: no-wrap-memcpy.patch
+Patch2: %{name}-x32.patch
+Patch3: %{name}-disable-64bitptr-test.patch
+URL: https://github.com/google/protobuf/
+BuildRequires: autoconf >= 2.59
+BuildRequires: automake >= 1:1.9
+%{?with_tests:BuildRequires: gmock-devel >= 1.9.0}
+%{?with_tests:BuildRequires: gtest-devel >= 1.9.0}
+BuildRequires: libstdc++-devel >= 6:4.7
BuildRequires: libtool
BuildRequires: pkgconfig
-BuildRequires: zlib-devel
-%if %{with python}
-BuildRequires: python-devel
+BuildRequires: sed >= 4.0
+%if %{with python2}
+BuildRequires: python-modules >= 1:2.7
BuildRequires: python-setuptools
+%endif
+%if %{with python3}
+BuildRequires: python3-modules >= 1:3.3
+BuildRequires: python3-setuptools
+%endif
+%if %{with python2} || %{with python3}
BuildRequires: rpm-pythonprov
%endif
+BuildRequires: rpmbuild(macros) >= 1.714
+%if %{with ruby}
+BuildRequires: ruby-devel
+BuildRequires: ruby-rake
+BuildRequires: ruby-rake-compiler
+%endif
+BuildRequires: sed >= 4.0
+BuildRequires: zlib-devel >= 1.2.0.4
Requires: %{name}-libs = %{version}-%{release}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%define _vimdatadir %{_datadir}/vim
+# triggers bogus "overflow in constant expression" errors with gcc 4.9 .. 5.4
+%define filterout -fwrapv
+
%description
Protocol Buffers are a way of encoding structured data in an efficient
yet extensible format. Google uses Protocol Buffers for almost all of
its internal RPC protocols and file formats.
Protocol buffers are a flexible, efficient, automated mechanism for
-serializing structured data – think XML, but smaller, faster, and
+serializing structured data - think XML, but smaller, faster, and
simpler. You define how you want your data to be structured once, then
you can use special generated source code to easily write and read
your structured data to and from a variety of data streams and using a
breaking deployed programs that are compiled against the "old" format.
This package contains Protocol Buffers compiler for all programming
-languages
+languages.
%description -l pl.UTF-8
+Bufory protokołowe (Protocol Buffers) to sposób kodowania danych
+strukturalnych w wydajny i rozszerzalny sposób. Google używa buforów
+protokołowych do prawie wszystkich wewnętrznych protokołów RPC i
+formatów plików.
+
Bufory protokołowe to elastyczny, wydajny i zautomatyzowany sposób
serializacji danych strukturalnych - podobny do XML-a, ale mniejszy,
szybszy i prostszy. Definiuje się raz, jaką strukturę mają mieć dane,
danych, z poziomu różnych języków. Można nawet uaktualniać strukturę
danych bez psucia programów skompilowanych w oparciu o "stary" format.
-Google używa buforów protokołowych (Protocol Buffers) do prawie
-wszystkich wewnętrznych protokołów RPC i formatów plików.
+Ten pakiet zawiera kompilator buforów protokołowych dla wszystkich
+języków programowania.
%package libs
-Summary: protobuf libraries
-Summary(pl.UTF-8): Biblioteki protobuf
+Summary: Protocol Buffers library
+Summary(pl.UTF-8): Biblioteka buforów protokołowych (Protocol Buffers)
Group: Libraries
+Requires: zlib >= 1.2.0.4
%description libs
-protobuf libraries.
+Protocol Buffers library.
%description libs -l pl.UTF-8
-Biblioteki protobuf.
+Biblioteka buforów protokołowych (Protocol Buffers).
%package lite
-Summary: Protocol Buffers LITE_RUNTIME libraries
-Group: Development/Libraries
+Summary: Protocol Buffers LITE_RUNTIME library
+Summary(pl.UTF-8): Biblioteka LITE_RUNTIME buforów protokołowych (Protocol Buffers)
+Group: Libraries
%description lite
-Protocol Buffers built with optimize_for = LITE_RUNTIME.
+Protocol Buffers library for programs 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.
+%description lite -l pl.UTF-8
+Biblioteka buforów protokołowych (Protocol Buffers) zbudowana dla
+programów z opcją optimize_for = LITE_RUNTIME.
+
+Opcja ta powoduje, że kompilator generuje kod, który wymaga tylko
+biblioteki libprotobuf-lite, która jest mniejsza niż libprotobuf, ale
+nie ma niektórych elementów, takich jak deskryptory czy refleksje.
+
%package devel
-Summary: Protocol Buffers C++ headers and libraries
-Summary(pl.UTF-8): Pliki nagłówkowe bibliotek protobuf
+Summary: Header files for Protocol Buffers libraries
+Summary(pl.UTF-8): Pliki nagłówkowe bibliotek buforów protokołowych (Protocol Buffers)
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-libs = %{version}-%{release}
-Requires: libstdc++-devel
+Requires: %{name}-lite = %{version}-%{release}
+Requires: libstdc++-devel >= 6:4.7
%description devel
-This package contains Protocol Buffers compiler for all languages and
-C++ headers and libraries
+Header files for Protocol Buffers libraries.
%description devel -l pl.UTF-8
-Pliki nagłówkowe bibliotek protobuf.
+Pliki nagłówkowe bibliotek buforów protokołowych (Protocol Buffers).
%package static
-Summary: Static development files for protobuf
-Summary(pl.UTF-8): Statyczne biblioteki protobuf
+Summary: Static Protocol Buffers libraries
+Summary(pl.UTF-8): Statyczne biblioteki buforów protokołowych (Protocol Buffers)
Group: Development/Libraries
Requires: %{name}-devel = %{version}-%{release}
%description static
-Static libraries for Protocol Buffers
+Static Protocol Buffers libraries.
%description static -l pl.UTF-8
-Statyczne biblioteki protobuf.
+Statyczne biblioteki buforów protokołowych (Protocol Buffers).
%package -n python-protobuf
-Summary: Python bindings for Google Protocol Buffers
-Group: Development/Languages
+Summary: Python 2 bindings for Protocol Buffers
+Summary(pl.UTF-8): Wiązania Pythona 2 do buforów protokołowych (Protocol Buffers)
+Group: Development/Languages/Python
+Requires: python-modules >= 1:2.7
# does not use C++ library at this time
-Conflicts: %{name} < %{version}
-Conflicts: %{name} > %{version}
+BuildArch: noarch
%description -n python-protobuf
-This package contains Python libraries for Google Protocol Buffers
+Python 2 bindings for Protocol Buffers.
+
+%description -n python-protobuf -l pl.UTF-8
+Wiązania Pythona 2 do buforów protokołowych (Protocol Buffers).
+
+%package -n python3-protobuf
+Summary: Python 3 bindings for Protocol Buffers
+Summary(pl.UTF-8): Wiązania Pythona 3 do buforów protokołowych (Protocol Buffers)
+Group: Development/Languages/Python
+Requires: python3-modules >= 1:3.3
+# does not use C++ library at this time
+BuildArch: noarch
+
+%description -n python3-protobuf
+Python 3 bindings for Protocol Buffers.
+
+%description -n python3-protobuf -l pl.UTF-8
+Wiązania Pythona 3 do buforów protokołowych (Protocol Buffers).
+
+%package -n ruby-google-protobuf
+Summary: Ruby bindings for Google Protocol Buffers
+Summary(pl.UTF-8): Wiązania języka Ruby do biblioteki Google Protocol Buffers
+Group: Development/Languages
+Requires: ruby
+
+%description -n ruby-google-protobuf
+Ruby bindings for Google Protocol Buffers.
+
+%description -n ruby-google-protobuf -l pl.UTF-8
+Wiązania języka Ruby do biblioteki Google Protocol Buffers.
%package -n vim-syntax-protobuf
-Summary: Vim syntax highlighting for Google Protocol Buffers descriptions
+Summary: Vim syntax highlighting for Protocol Buffers descriptions
+Summary(pl.UTF-8): Podświetlanie składni Vima dla opisów buforów protokołowych (Protocol Buffers)
Group: Development/Libraries
Requires: vim-rt >= 4:7.2.170
%description -n vim-syntax-protobuf
-This package contains syntax highlighting for Google Protocol Buffers
-descriptions in Vim editor
+This package contains syntax highlighting for Protocol Buffers
+descriptions in Vim editor.
+
+%description -n vim-syntax-protobuf -l pl.UTF-8
+Ten pakiet zawiera pliki podświetlania składni edytora Vim dla
+opisów buforów protokołowych (Protocol Buffers).
%prep
%setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%ifnarch %{x8664} aarch64 alpha ia64 mips64 ppc64 s390x sparc64
+%patch3 -p1
+%endif
+
+%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+python(\s|$),#!%{__python}\1,' \
+ examples/add_person.py \
+ examples/list_people.py
+
+# gcc 10.2 false positive warning (with tag values >= 128):
+#
+# if (tag < 128) {
+# return *ptr == tag;
+# ~~~~~^~~~~~ error: comparison is always false due to limited range of data type [-Werror=type-limits]
+# } else {
+#
+%{__sed} -i -e 's/-Werror //' src/Makefile.am
%build
-%configure
+%{__libtoolize}
+%{__aclocal} -I m4
+%{__autoconf}
+%{__autoheader}
+%{__automake}
+# Additional variables defined according to https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=192821
+%configure \
+ CFLAGS='%{rpmcflags} -DGOOGLE_PROTOBUF_NO_RTTI' \
+ CPPFLAGS='%{rpmcppflags} -DGOOGLE_PROTOBUF_NO_RTTI' \
+ --disable-silent-rules \
+ --disable-external-gtest
%{__make}
-%if %{with python}
cd python
-%{__python} setup.py build
-%{__sed} -i -e 1d build/lib/google/protobuf/descriptor_pb2.py
+%if %{with python2}
+%py_build
+%endif
+%if %{with python3}
+%py3_build
+%endif
+cd ..
+
+%if %{with ruby}
+cd ruby
+rake
+#rake clobber_package gem
cd ..
%endif
+%if %{with tests}
+%{__make} check
+%endif
+
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
cp -p editors/proto.vim $RPM_BUILD_ROOT%{_vimdatadir}/syntax/proto.vim
cp -p %{SOURCE1} $RPM_BUILD_ROOT%{_vimdatadir}/ftdetect/proto.vim
-%if %{with python}
cd python
-%{__python} setup.py install \
- --root=$RPM_BUILD_ROOT \
- --single-version-externally-managed \
- --optimize=2
+%if %{with python2}
+%py_install
%py_postclean
-cd ..
%endif
+%if %{with python3}
+%py3_install
+%endif
+cd ..
-cp -p examples/* $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
+%if %{with ruby}
+install -d $RPM_BUILD_ROOT{%{ruby_vendorarchdir}/google,%{ruby_vendorlibdir}/google,%{ruby_specdir}}
+install ruby/lib/google/protobuf_c.so $RPM_BUILD_ROOT%{ruby_vendorarchdir}/google
+cp -pr ruby/lib/google/{protobuf,protobuf.rb} $RPM_BUILD_ROOT%{ruby_vendorlibdir}/google
+cp -p ruby/google-protobuf.gemspec $RPM_BUILD_ROOT%{ruby_specdir}/google-protobuf-%{version}.gemspec
+%endif
+cp -pr examples/* $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
-%doc CHANGES.txt CONTRIBUTORS.txt README.txt
+%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.7
+%attr(755,root,root) %ghost %{_libdir}/libprotoc.so.25
%files libs
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libprotobuf.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotobuf.so.7
+%attr(755,root,root) %ghost %{_libdir}/libprotobuf.so.25
%files lite
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libprotobuf-lite.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotobuf-lite.so.7
+%attr(755,root,root) %ghost %{_libdir}/libprotobuf-lite.so.25
%files devel
%defattr(644,root,root,755)
%{_libdir}/libprotobuf-lite.la
%{_libdir}/libprotobuf.la
%{_libdir}/libprotoc.la
-%{_includedir}/google
-%{_examplesdir}/%{name}-%{version}
+# XXX: dir shared with libtcmalloc
+%dir %{_includedir}/google
+%{_includedir}/google/protobuf
%{_pkgconfigdir}/protobuf-lite.pc
%{_pkgconfigdir}/protobuf.pc
+%{_examplesdir}/%{name}-%{version}
%files static
%defattr(644,root,root,755)
%{_libdir}/libprotobuf.a
%{_libdir}/libprotoc.a
-%if %{with python}
+%if %{with python2}
%files -n python-protobuf
%defattr(644,root,root,755)
-%doc python/README.txt
+%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
%endif
+%if %{with python3}
+%files -n python3-protobuf
+%defattr(644,root,root,755)
+%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
+%endif
+
+%if %{with ruby}
+%files -n ruby-google-protobuf
+%defattr(644,root,root,755)
+%doc ruby/README.md
+%dir %{ruby_vendorarchdir}/google
+%attr(755,root,root) %{ruby_vendorarchdir}/google/protobuf_c.so
+%dir %{ruby_vendorlibdir}/google
+%{ruby_vendorlibdir}/google/protobuf.rb
+%{ruby_vendorlibdir}/google/protobuf
+%{ruby_specdir}/google-protobuf-%{version}.gemspec
+%endif
+
%files -n vim-syntax-protobuf
%defattr(644,root,root,755)
%{_datadir}/vim/ftdetect/proto.vim