# TODO:
# - 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"
Summary: Protocol Buffers - Google's data interchange format
Summary(pl.UTF-8): Protocol Buffers - format wymiany danych Google
Name: protobuf
-Version: 2.6.0
+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
-# Source0-md5: 99d5f73dcd473594bf8f245d7b0cfb77
+# Source0-md5: 94d3a8148c35cedd2db953245e057a67
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
+BuildRequires: automake >= 1:1.9
+%{?with_tests:BuildRequires: gmock-devel}
%{?with_tests:BuildRequires: gtest-devel}
BuildRequires: libstdc++-devel
BuildRequires: libtool
BuildRequires: pkgconfig
-BuildRequires: rpmbuild(macros) >= 1.219
-BuildRequires: zlib-devel >= 1.2.0.4
-%if %{with python}
+%if %{with python2}
+BuildRequires: python-modules >= 1:2.6
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: 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
Statyczne biblioteki buforów protokołowych (Protocol Buffers).
%package -n python-protobuf
-Summary: Python bindings for Protocol Buffers
-Summary(pl.UTF-8): Wiązania Pythona do buforów protokołowych (Protocol Buffers)
+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.6
# does not use C++ library at this time
-Conflicts: %{name} < %{version}
-Conflicts: %{name} > %{version}
%description -n python-protobuf
-Python bindings for Protocol Buffers.
+Python 2 bindings for Protocol Buffers.
%description -n python-protobuf -l pl.UTF-8
-Wiązania Pythona do buforów protokołowych (Protocol Buffers).
+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
+
+%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 Protocol Buffers descriptions
%prep
%setup -q
%patch0 -p1
+%patch1 -p1
+
+ln -s /usr/src/gmock/src/gmock*.cc src
%build
%{__libtoolize}
CPPFLAGS='%{rpmcppflags} -DGOOGLE_PROTOBUF_NO_RTTI'
%{__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
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 ..
+%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 -p examples/* $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
%clean
%files
%defattr(644,root,root,755)
-%doc CHANGES.txt CONTRIBUTORS.txt COPYING.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.9
+%attr(755,root,root) %ghost %{_libdir}/libprotoc.so.12
%files libs
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libprotobuf.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotobuf.so.9
+%attr(755,root,root) %ghost %{_libdir}/libprotobuf.so.12
%files lite
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libprotobuf-lite.so.*.*.*
-%attr(755,root,root) %ghost %{_libdir}/libprotobuf-lite.so.9
+%attr(755,root,root) %ghost %{_libdir}/libprotobuf-lite.so.12
%files devel
%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
+%{py_sitescriptdir}/protobuf-*-py*.egg-info
+%{py_sitescriptdir}/protobuf-*-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-*-py*.egg-info
+%{py3_sitescriptdir}/protobuf-*-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