-# TODO
-# - bindings and bconds for them
-Summary: A high performance, lightweight messaging library
+# TODO: package go files (where?)
+#
+# Conditional build:
+%bcond_with static_libs # static libraries
+%bcond_with golang # Go binding
+%bcond_without python # Python binding
+%bcond_without ruby # Ruby binding
+
+Summary: Qpid Proton - AMQP messaging toolkit
+Summary(pl.UTF-8): Qpid Proton - narzędzia do komunikacji AMQP
Name: qpid-proton
-Version: 0.8
-Release: 0.1
+Version: 0.31.0
+Release: 1
License: Apache v2.0
Group: Libraries
-Source0: http://www.apache.org/dist/qpid/proton/%{version}/%{name}-%{version}.tar.gz
-# Source0-md5: 48bfbd7ba5a639760bb28380f4d68208
-Patch0001: 0001-PROTON-731-Installing-Python-requires-Proton-be-inst.patch
+Source0: https://downloads.apache.org/qpid/proton/%{version}/%{name}-%{version}.tar.gz
+# Source0-md5: 568bb8459e54ce94fc216de2b9e2b038
+Patch0: %{name}-format.patch
URL: http://qpid.apache.org/proton/
-BuildRequires: cmake >= 2.6
+BuildRequires: cmake >= 2.8.12
+BuildRequires: cyrus-sasl-devel
BuildRequires: doxygen
-BuildRequires: epydoc
+%{?with_golang:BuildRequires: golang >= 1.11}
+BuildRequires: libstdc++-devel
BuildRequires: libuuid-devel
BuildRequires: openssl-devel
BuildRequires: pkgconfig
-BuildRequires: python
-BuildRequires: python-devel
-BuildRequires: swig
+BuildRequires: python >= 2
+%{?with_python:BuildRequires: python-devel}
+%{?with_ruby:BuildRequires: ruby-devel}
+%{?with_python:BuildRequires: swig-python}
+%{?with_ruby:BuildRequires: swig-ruby}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
-%define proton_datadir %{_datadir}/proton-%{version}
-
%description
Proton is a high performance, lightweight messaging library. It can be
used in the widest range of messaging applications including brokers,
-client libraries, routers, bridges, proxies, and more. Proton is based
-on the AMQP 1.0 messaging standard. Using Proton it is trivial to
-integrate with the AMQP 1.0 ecosystem from any platform, environment,
-or language.
+client libraries, routers, bridges, proxies, and more. Proton makes it
+trivial to integrate with the AMQP 1.0 ecosystem from any platform,
+environment, or language.
+
+%description -l pl.UTF-8
+Proton to wydajna, lekka biblioteka do komunikacji. Może być używana w
+szerokiej gamie aplikacji komunikacyjnych, w tym brokerów, bibliotek
+klienckich, routerów, mostków, proxy itp. Proton powoduje, że
+integrowanie z ekosystemem AMQP 1.0 z woeolnej platformy, środowiska
+czy języka staje się trywialne.
%package c
Summary: C libraries for Qpid Proton
+Summary(pl.UTF-8): Biblioteki C Qpid Proton
Group: Libraries
%description c
-%{summary}.
+C libraries for Qpid Proton.
+
+%description c -l pl.UTF-8
+Biblioteki C Qpid Proton.
%package c-devel
-Summary: Development libraries for writing messaging apps with Qpid Proton
+Summary: Development files for Qpid Proton C libraries
+Summary(pl.UTF-8): Pliki programistyczne bibliotek Qpid Proton dla C
Group: Development/Libraries
-Requires: qpid-proton-c = %{version}-%{release}
+Requires: %{name}-c = %{version}-%{release}
%description c-devel
-%{summary}.
+Development files for writing messaging apps with Qpid Proton C
+libraries.
+
+%description c-devel -l pl.UTF-8
+Pliki programistyczne do tworzenia aplikacji z wykorzystaniem
+bibliotek C Qpid Proton.
+
+%package c-apidocs
+Summary: Documentation for Qpid Proton C API
+Summary(pl.UTF-8): Dokumentacja API bibliotek C Qpid Proton
+Group: Documentation
+Obsoletes: qpid-proton-c-devel-doc < 0.31.0
+%if "%{_rpmversion}" >= "4.6"
+BuildArch: noarch
+%endif
+
+%description c-apidocs
+Documentation for Qpid Proton C API.
+
+%description c-apidocs -l pl.UTF-8
+Dokumentacja API bibliotek C Qpid Proton.
-%package c-devel-doc
-Summary: Documentation for the C development libraries for Qpid Proton
+%package cpp
+Summary: C++ libraries for Qpid Proton
+Summary(pl.UTF-8): Biblioteki C++ Qpid Proton
+Group: Libraries
+Requires: %{name}-c = %{version}-%{release}
+Requires: libstdc++-devel
+
+%description cpp
+C++ libraries for Qpid Proton.
+
+%description cpp -l pl.UTF-8
+Biblioteki C++ Qpid Proton.
+
+%package cpp-devel
+Summary: Development files for Qpid Proton C++ library
+Summary(pl.UTF-8): Pliki programistyczne biblioteki Qpid Proton dla C++
+Group: Development/Libraries
+Requires: %{name}-c-devel = %{version}-%{release}
+Requires: %{name}-cpp = %{version}-%{release}
+
+%description cpp-devel
+Development files for writing messaging apps with Qpid Proton C++
+library.
+
+%description cpp-devel -l pl.UTF-8
+Pliki programistyczne do tworzenia aplikacji z wykorzystaniem
+biblioteki C++ Qpid Proton.
+
+%package cpp-apidocs
+Summary: Documentation for Qpid Proton C++ API
+Summary(pl.UTF-8): Dokumentacja API biblioteki C++ Qpid Proton
Group: Documentation
-%if "%{_rpmversion}" >= "5"
+%if "%{_rpmversion}" >= "4.6"
BuildArch: noarch
%endif
-%description c-devel-doc
-%{summary}.
+%description cpp-apidocs
+Documentation for Qpid Proton C++ API.
+
+%description c-apidocs -l pl.UTF-8
+Dokumentacja API biblioteki C++ Qpid Proton.
+
%package -n python-%{name}
Summary: Python language bindings for the Qpid Proton messaging framework
+Summary(pl.UTF-8): Wiązania Pythona do szkieletu komunikacji Qpid Proton
Group: Libraries/Python
Requires: %{name}-c = %{version}-%{release}
%description -n python-%{name}
-%{summary}.
+Python language bindings for the Qpid Proton messaging framework.
+
+%description -n python-%{name} -l pl.UTF-8
+Wiązania Pythona do szkieletu komunikacji Qpid Proton.
-%package -n python-%{name}-doc
+%package -n python-%{name}-apidocs
Summary: Documentation for the Python language bindings for Qpid Proton
+Summary(pl.UTF-8): Dokumentacja wiązań Pythona do biblioteki Qpid Proton
Group: Documentation
-%if "%{_rpmversion}" >= "5"
+Obsoletes: python-qpid-proton-doc < 0.31.0
+%if "%{_rpmversion}" >= "4.6"
BuildArch: noarch
%endif
-%description -n python-%{name}-doc
-%{summary}.
+%description -n python-%{name}-apidocs
+Documentation for the Python language bindings for Qpid Proton.
+
+%description -n python-%{name}-apidocs -l pl.UTF-8
+Dokumentacja wiązań Pythona do biblioteki Qpid Proton.
+
+%package -n ruby-%{name}
+Summary: Ruby language bindings for the Qpid Proton messaging framework
+Summary(pl.UTF-8): Wiązania języka Ruby do szkieletu komunikacji Qpid Proton
+Group: Development/Languages
+Requires: %{name}-c = %{version}-%{release}
+Requires: ruby-modules
+
+%description -n ruby-%{name}
+Ruby language bindings for the Qpid Proton messaging framework.
+
+%description -n ruby-%{name} -l pl.UTF-8
+Wiązania języka Ruby do szkieletu komunikacji Qpid Proton.
%prep
%setup -q
-%patch0001 -p1
+%patch0 -p1
+
+%{__sed} -i -e '1s,/usr/bin/python$,%{__python},' \
+ c/examples/testme \
+ cpp/examples/testme
+
+%{__sed} -i -e '1s,/usr/bin/env python$,%{__python},' \
+ python/examples/*.py
%build
-%cmake \
- -DPROTON_DISABLE_RPATH=true \
- -DPYTHON_SITEARCH_PACKAGES=%{python_sitearch} \
- -DBINDING_LANGS="%{?with_perl:PERL} %{?with_php:PHP} %{?with_python:PYTHON} %{?with_ruby:RUBY}" \
- -DNOBUILD_RUBY=1 \
- -DNOBUILD_PHP=1 \
- -DNOBUILD_JAVA=1 \
- -DBUILD_PYTHON=0 \
- -DBUILD_PERL=0 \
- -DSYSINSTALL_PYTHON=1 \
- -DSYSINSTALL_PERL=0 \
- -DCHECK_SYSINSTALL_PYTHON=0 \
- .
+install -d build
+cd build
+%cmake .. \
+ -DBUILD_BINDINGS="cpp;go%{?with_python:;python}%{?with_ruby:;ruby}" \
+ %{?with_golang:-DBUILD_GO=ON} \
+ %{?with_static_libs:-DBUILD_STATIC_LIBS=ON} \
+ -DPYTHON_SITEARCH_PACKAGES=%{py_sitedir} \
+ -DSYSINSTALL_PYTHON=ON
%{__make} all docs
%install
rm -rf $RPM_BUILD_ROOT
-%{__make} install \
+
+%{__make} -C build install \
DESTDIR=$RPM_BUILD_ROOT
+%{__rm} -r $RPM_BUILD_ROOT%{_datadir}/proton/{CMakeLists.txt,LICENSE.txt,README.md,examples/README.md,tests}
+
+install -d $RPM_BUILD_ROOT{%{_examplesdir},%{_docdir}/%{name}}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/examples/c $RPM_BUILD_ROOT%{_examplesdir}/%{name}-c-%{version}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/examples/cpp $RPM_BUILD_ROOT%{_examplesdir}/%{name}-cpp-%{version}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/docs/api-c $RPM_BUILD_ROOT%{_docdir}/%{name}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/docs/api-cpp $RPM_BUILD_ROOT%{_docdir}/%{name}
+
%if %{with python}
-chmod +x $RPM_BUILD_ROOT%{py_sitedir}/_cproton.so
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/docs/api-py $RPM_BUILD_ROOT%{_docdir}/%{name}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/examples/python $RPM_BUILD_ROOT%{_examplesdir}/python-%{name}-%{version}
+
+%py_postclean
%endif
-# clean up files that are not shipped
-rm -rf $RPM_BUILD_ROOT%{_exec_prefix}/bindings
-rm -rf $RPM_BUILD_ROOT%{_libdir}/java
-rm -rf $RPM_BUILD_ROOT%{_libdir}/libproton-jni.so
-rm -rf $RPM_BUILD_ROOT%{_datarootdir}/java
-rm -rf $RPM_BUILD_ROOT%{_libdir}/proton.cmake
+%if %{with ruby}
+%{__mv} $RPM_BUILD_ROOT%{_datadir}/proton/examples/ruby $RPM_BUILD_ROOT%{_examplesdir}/ruby-%{name}-%{version}
+%endif
%clean
rm -rf $RPM_BUILD_ROOT
%post c -p /sbin/ldconfig
%postun c -p /sbin/ldconfig
+%post cpp -p /sbin/ldconfig
+%postun cpp -p /sbin/ldconfig
+
%files c
%defattr(644,root,root,755)
-%dir %{proton_datadir}
-%doc %{proton_datadir}/LICENSE
-%doc %{proton_datadir}/README
-%doc %{proton_datadir}/TODO
+%doc NOTICE.txt README.md
%attr(755,root,root) %{_libdir}/libqpid-proton.so.*.*.*
-%ghost %{_libdir}/libqpid-proton.so.2
-%attr(755,root,root) %{_bindir}/proton
-%attr(755,root,root) %{_bindir}/proton-dump
-%{_mandir}/man1/proton-dump.1*
-%{_mandir}/man1/proton.1*
+%attr(755,root,root) %ghost %{_libdir}/libqpid-proton.so.11
+%attr(755,root,root) %{_libdir}/libqpid-proton-core.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libqpid-proton-core.so.10
+%attr(755,root,root) %{_libdir}/libqpid-proton-proactor.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libqpid-proton-proactor.so.1
%files c-devel
%defattr(644,root,root,755)
-%{_includedir}/proton
-%{_libdir}/libqpid-proton.so
+%attr(755,root,root) %{_libdir}/libqpid-proton.so
+%attr(755,root,root) %{_libdir}/libqpid-proton-core.so
+%attr(755,root,root) %{_libdir}/libqpid-proton-proactor.so
+%dir %{_includedir}/proton
+%{_includedir}/proton/*.h
+%{_includedir}/proton/cproton.i
%{_pkgconfigdir}/libqpid-proton.pc
+%{_pkgconfigdir}/libqpid-proton-core.pc
+%{_pkgconfigdir}/libqpid-proton-proactor.pc
%{_libdir}/cmake/Proton
%{_datadir}/proton/examples
-%files c-devel-doc
+%files c-apidocs
+%defattr(644,root,root,755)
+%dir %{_docdir}/%{name}
+%{_docdir}/%{name}/api-c
+%{_examplesdir}/%{name}-c-%{version}
+
+%files cpp
%defattr(644,root,root,755)
-%doc %{proton_datadir}/docs/api-c
+%attr(755,root,root) %{_libdir}/libqpid-proton-cpp.so.*.*.*
+%attr(755,root,root) %ghost %{_libdir}/libqpid-proton-cpp.so.12
+
+%files cpp-devel
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libqpid-proton-cpp.so
+%{_includedir}/proton/*.hpp
+%{_includedir}/proton/codec
+%{_includedir}/proton/internal
+%{_includedir}/proton/io
+%{_pkgconfigdir}/libqpid-proton-cpp.pc
+%{_libdir}/cmake/ProtonCpp
+
+%files cpp-apidocs
+%defattr(644,root,root,755)
+%dir %{_docdir}/%{name}
+%{_docdir}/%{name}/api-cpp
+%{_examplesdir}/%{name}-cpp-%{version}
%if %{with python}
%files -n python-%{name}
%defattr(644,root,root,755)
-%{py_sitedir}/_cproton.so
-%{py_sitedir}/cproton.*
-%{py_sitedir}/proton.*
+%attr(755,root,root) %{py_sitedir}/_cproton.so
+%{py_sitedir}/cproton.py[co]
+%{py_sitedir}/proton
-%files -n python-%{name}-doc
+%files -n python-%{name}-apidocs
%defattr(644,root,root,755)
-%doc %{proton_datadir}/docs/api-py
+%dir %{_docdir}/%{name}
+%{_docdir}/%{name}/api-py
+%{_examplesdir}/python-%{name}-%{version}
+%endif
+
+%if %{with ruby}
+%files -n ruby-%{name}
+%defattr(644,root,root,755)
+%if 0
+# cannot use SYSINSTALL_RUBY for now because...
+%attr(755,root,root) %{ruby_vendorarchdir}/cproton.so
+%{ruby_vendorarchdir}/qpid_proton.rb
+# the files below are likely to conflict with other ruby packages
+%{ruby_vendorarchdir}/codec
+%{ruby_vendorarchdir}/core
+%{ruby_vendorarchdir}/handler
+%{ruby_vendorarchdir}/reactor
+%{ruby_vendorarchdir}/types
+%{ruby_vendorarchdir}/util
+%else
+# ...so use private install
+%dir %{_libdir}/proton
+%dir %{_libdir}/proton/bindings
+%dir %{_libdir}/proton/bindings/ruby
+%attr(755,root,root) %{_libdir}/proton/bindings/ruby/cproton.so
+%{_libdir}/proton/bindings/ruby/qpid_proton.rb
+%{_libdir}/proton/bindings/ruby/codec
+%{_libdir}/proton/bindings/ruby/core
+%{_libdir}/proton/bindings/ruby/handler
+%{_libdir}/proton/bindings/ruby/reactor
+%{_libdir}/proton/bindings/ruby/types
+%{_libdir}/proton/bindings/ruby/util
+%endif
+%{_examplesdir}/ruby-%{name}-%{version}
%endif