# TODO:
# - think about building MPI.
# - split shared libs from core package into -iostreams/-serialization.
-# - fix building context and corouting on x32 (patch1)
#
# Conditional build:
-%bcond_without python # without boost-python support
+%bcond_without python2 # without boost-python2 support
+%bcond_without python3 # without boost-python3 support
%define fver %(echo %{version} | tr . _)
Summary: The Boost C++ Libraries
Summary(pl.UTF-8): Biblioteki C++ "Boost"
Name: boost
-Version: 1.56.0
+Version: 1.61.0
Release: 2
License: Boost Software License and others
Group: Libraries
+# TODO: use .7z extension:
Source0: http://downloads.sourceforge.net/boost/%{name}_%{fver}.tar.bz2
-# Source0-md5: a744cf167b05d72335f27c88115f211d
+# Source0-md5: 6095876341956f65f9d35939ccea1a9f
Patch0: %{name}-link.patch
Patch1: %{name}-x32-context.patch
+Patch2: %{name}-clean-gcc-flags.patch
# FC Patches:
# https://svn.boost.org/trac/boost/ticket/5637
Patch203: %{name}-1.54.0-mpl-print.patch
-# https://svn.boost.org/trac/boost/ticket/8870
-Patch211: %{name}-1.54.0-spirit-unused_typedef.patch
-Patch212: %{name}-1.54.0-spirit-unused_typedef-2.patch
-# https://svn.boost.org/trac/boost/ticket/8871
-Patch213: %{name}-1.54.0-numeric-unused_typedef.patch
-# https://svn.boost.org/trac/boost/ticket/8878
-Patch218: %{name}-1.54.0-locale-unused_typedef.patch
# https://svn.boost.org/trac/boost/ticket/8881
Patch221: %{name}-1.54.0-mpi-unused_typedef.patch
-# https://svn.boost.org/trac/boost/ticket/8888
-Patch222: %{name}-1.54.0-python-unused_typedef.patch
-# https://svn.boost.org/trac/boost/ticket/9038
-Patch224: %{name}-1.54.0-pool-test_linking.patch
URL: http://www.boost.org/
BuildRequires: bzip2-devel
BuildRequires: expat-devel
BuildRequires: libstdc++-devel
BuildRequires: perl-base
%{?with_python:BuildRequires: python-devel >= 2.2}
+%{?with_python3:BuildRequires: python3-devel}
BuildRequires: rpm-pythonprov
BuildRequires: zlib-devel
BuildConflicts: gcc = 5:3.3.1
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
Requires: %{name}-chrono = %{version}-%{release}
-%ifnarch x32
Requires: %{name}-context = %{version}-%{release}
-%endif
Requires: %{name}-date_time = %{version}-%{release}
Requires: %{name}-filesystem = %{version}-%{release}
Requires: %{name}-graph = %{version}-%{release}
%description static -l pl.UTF-8
Statyczne wersje podstawowych bibliotek C++ Boost.
+%package python-devel-common
+Summary: Boost.Python development headers
+Summary(pl.UTF-8): Pliki nagłówkowe biblioteki Boost.Python
+Group: Development/Libraries
+Requires: %{name}-devel = %{version}-%{release}
+
+%description python-devel-common
+Headers for the Boost.Python library.
+
+%description python-devel-common -l pl.UTF-8
+Pliki nagłówkowe biblioteki Boost.Python.
+
%package python
-Summary: Boost.Python library
-Summary(pl.UTF-8): biblioteka Boost.Python
+Summary: Boost.Python library for Python 2
+Summary(pl.UTF-8): Biblioteka Boost.Python dla Pythona 2
Group: Libraries
-Requires: python
+Requires: python-libs
%description python
Use the Boost Python Library to quickly and easily export a C++
-library to Python such that the Python interface is very similar to
-the C++ interface. It is designed to be minimally intrusive on your
+library to Python 2 such that the Python 2 interface is very similar
+to the C++ interface. It is designed to be minimally intrusive on your
C++ design. In most cases, you should not have to alter your C++
classes in any way in order to use them with Boost.Python. The system
-should simply ``reflect'' your C++ classes and functions into Python.
+should simply ``reflect'' your C++ classes and functions into Python
+3.
%description python -l pl.UTF-8
Biblioteka Boost Python służy do szybkiego i prostego eksportu
-biblioteki C++ do Pythona, tak że interfejs Pythona jest bardzo
+biblioteki C++ do Pythona 2, tak że interfejs Pythona 2 jest bardzo
podobny do interfejsu C++. Biblioteka jest zaprojektowana tak, żeby
narzucać jak najmniej wymagań dotyczących konstrukcjii C++. W
większości przypadków nie trzeba w ogóle zmieniać własnych klas C++,
żeby używać ich z Boost.Python. System powinien po prostu ,,odbić''
-klasy C++ i funkcje do Pythona.
+klasy C++ i funkcje do Pythona 3.
%package python-devel
-Summary: Boost.Python development headers
-Summary(pl.UTF-8): Pliki nagłówkowe dla Boost.Python
+Summary: Boost.Python development files for Python 2
+Summary(pl.UTF-8): Pliki programistyczne biblioteki Boost.Python dla Pythona 2
Group: Development/Libraries
Requires: %{name}-devel = %{version}-%{release}
Requires: %{name}-python = %{version}-%{release}
+Requires: %{name}-python-devel-common = %{version}-%{release}
%description python-devel
-Headers for the Boost.Python library.
+Boost.Python development files for Python 2.
%description python-devel -l pl.UTF-8
-Pliki nagłówkowe dla biblioteki Boost.Python.
+Pliki programistyczne biblioteki Boost.Python dla Pythona 2.
%package python-static
-Summary: Static version of Boost.Python library
-Summary(pl.UTF-8): Statyczna wersja biblioteki Boost.Python
+Summary: Static version of Boost.Python library for Python 2
+Summary(pl.UTF-8): Statyczna wersja biblioteki Boost.Python dla Pythona 2
Group: Development/Libraries
Requires: %{name}-python-devel = %{version}-%{release}
%description python-static
-Static version of Boost.Python library.
+Static version of Boost.Python library for Python 2.
%description python-static -l pl.UTF-8
-Statyczna wersja biblioteki Boost.Python.
+Statyczna wersja biblioteki Boost.Python dla Pythona 2.
+
+%package python3
+Summary: Boost.Python library for Python 3
+Summary(pl.UTF-8): biblioteka Boost.Python dla Pythona 3
+Group: Libraries
+Requires: python3-libs
+
+%description python3
+Use the Boost Python Library to quickly and easily export a C++
+library to Python 3 such that the Python 3 interface is very similar
+to the C++ interface. It is designed to be minimally intrusive on your
+C++ design. In most cases, you should not have to alter your C++
+classes in any way in order to use them with Boost.Python. The system
+should simply ``reflect'' your C++ classes and functions into Python
+3.
+
+%description python3 -l pl.UTF-8
+Biblioteka Boost Python służy do szybkiego i prostego eksportu
+biblioteki C++ do Pythona 3, tak że interfejs Pythona 3 jest bardzo
+podobny do interfejsu C++. Biblioteka jest zaprojektowana tak, żeby
+narzucać jak najmniej wymagań dotyczących konstrukcjii C++. W
+większości przypadków nie trzeba w ogóle zmieniać własnych klas C++,
+żeby używać ich z Boost.Python. System powinien po prostu ,,odbić''
+klasy C++ i funkcje do Pythona 3.
+
+%package python3-devel
+Summary: Boost.Python development files for Python 3
+Summary(pl.UTF-8): Pliki programistyczne biblioteki Boost.Python dla Pythona 3
+Group: Development/Libraries
+Requires: %{name}-devel = %{version}-%{release}
+Requires: %{name}-python-devel-common = %{version}-%{release}
+Requires: %{name}-python3 = %{version}-%{release}
+
+%description python3-devel
+Boost.Python development files for Python 3.
+
+%description python3-devel -l pl.UTF-8
+Pliki programistyczne biblioteki Boost.Python dla Pythona 3.
+
+%package python3-static
+Summary: Static version of Boost.Python library for Python 3
+Summary(pl.UTF-8): Statyczna wersja biblioteki Boost.Python dla Pythona 3
+Group: Development/Libraries
+Requires: %{name}-python3-devel = %{version}-%{release}
+
+%description python3-static
+Static version of Boost.Python library for Python 3.
+
+%description python3-static -l pl.UTF-8
+Statyczna wersja biblioteki Boost.Python dla Pythona 3.
%package chrono
Summary: Useful time utilities
Summary: Boost C++ Library documentation
Summary(pl.UTF-8): Dokumentacja dla biblioteki Boost C++
Group: Documentation
-Requires: %{name}-devel = %{version}-%{release}
+%if "%{_rpmversion}" >= "5"
+BuildArch: noarch
+%endif
%description doc
Documentation for the Boost C++ Library.
%prep
%setup -q -n %{name}_%{fver}
%patch0 -p1
-#patch1 -p0
+%patch1 -p1
+%patch2 -p1
%patch203 -p0
-%patch211 -p1
-%patch212 -p1
-%patch213 -p1
-%patch218 -p1
%patch221 -p1
-%patch222 -p1
-%patch224 -p1
-
-# - don't know how to pass it through (b)jam -s (no way?)
-# due to oversophisticated build flags system.
-# - pass -fPIC due to <shared-linkable> removal.
-%{__sed} -i "s/<optimization>speed : -O3/<optimization>speed : ${CXXFLAGS:-%rpmcxxflags} -fPIC/" tools/build/src/tools/gcc.jam
-
-# cleanup -g switch to avoid override debuginfocflags.
-%{__sed} -i 's/<debug-symbols>on : -g/<debug-symbols>on :/' tools/build/src/tools/gcc.jam
-# link against shared expat library.
-#%{__sed} -i 's:find-static:find-shared:' libs/graph/build/Jamfile.v2
cat << EOF > tools/build/src/user-config.jam
-using gcc : %{cxx_version} : %{__cxx} ;
+using gcc : %{cxx_version} : %{__cxx} : <cflags>"%{rpmcflags} -fPIC" <cxxflags>"%{rpmcxxflags} -fPIC" <linkflags>"%{rpmldflags}" ;
EOF
# cleanup backups after patching
find '(' -name '*~' -o -name '*.orig' ')' -print0 | xargs -0 -r -l512 rm -f
%build
-%if %{with python}
-PYTHON_VERSION=$(%{__python} -c 'import sys; print sys.version[0:3]')
-PYTHON_ROOT=%{_prefix}
-%else
-PYTHON_ROOT=
-PYTHON_VERSION=
-%endif
EXPAT_INCLUDE=%{_includedir} \
EXPAT_LIBPATH=%{_libdir} \
ICU_PATH=%{_prefix} \
./bootstrap.sh \
- --prefix=%{_prefix}
+ --prefix=%{_prefix} \
+ -without-libraries=python
./b2 \
-%ifarch x32
- --without-context \
- --without-coroutine \
-%endif
-d2 --toolset=gcc \
variant=release \
debug-symbols=on \
link=static,shared \
threading=multi
+%if %{with python3}
+echo "using python : %{py3_ver}m : %{py3_prefix} : %{py3_incdir} ;" >> project-config.jam
+./b2 \
+ --with-python python=%{py3_ver}m \
+ -a -d2 --toolset=gcc \
+ variant=release \
+ debug-symbols=on \
+ inlining=on \
+ link=static,shared \
+ threading=multi
+%endif
+
+%if %{with python2}
+echo "using python : %{py_ver} : %{py_prefix} : %{py_incdir} ;" >> project-config.jam
+./b2 \
+ --with-python python=%{py_ver} \
+ -a -d2 --toolset=gcc \
+ variant=release \
+ debug-symbols=on \
+ inlining=on \
+ link=static,shared \
+ threading=multi
+%endif
+
%install
rm -rf $RPM_BUILD_ROOT
install -d $RPM_BUILD_ROOT{%{_libdir},%{_includedir}}
%post python -p /sbin/ldconfig
%postun python -p /sbin/ldconfig
+%post python3 -p /sbin/ldconfig
+%postun python3 -p /sbin/ldconfig
+
%post program_options -p /sbin/ldconfig
%postun program_options -p /sbin/ldconfig
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_atomic.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_container.so.*.*.*
-%ifnarch x32
%attr(755,root,root) %{_libdir}/libboost_coroutine.so.*.*.*
-%endif
%attr(755,root,root) %{_libdir}/libboost_iostreams.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_math_*.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_random.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_serialization.so.*.*.*
+%attr(755,root,root) %{_libdir}/libboost_type_erasure.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_wserialization.so.*.*.*
%files devel
%attr(755,root,root) %{_libdir}/libboost_atomic.so
%attr(755,root,root) %{_libdir}/libboost_chrono.so
%attr(755,root,root) %{_libdir}/libboost_container.so
-%ifnarch x32
%attr(755,root,root) %{_libdir}/libboost_context.so
%attr(755,root,root) %{_libdir}/libboost_coroutine.so
-%endif
%attr(755,root,root) %{_libdir}/libboost_date_time.so
%attr(755,root,root) %{_libdir}/libboost_filesystem.so
%attr(755,root,root) %{_libdir}/libboost_graph.so
%attr(755,root,root) %{_libdir}/libboost_system.so
%attr(755,root,root) %{_libdir}/libboost_thread.so
%attr(755,root,root) %{_libdir}/libboost_timer.so
+%attr(755,root,root) %{_libdir}/libboost_type_erasure.so
%attr(755,root,root) %{_libdir}/libboost_unit_test_framework.so
%attr(755,root,root) %{_libdir}/libboost_wave.so
%attr(755,root,root) %{_libdir}/libboost_wserialization.so
%{_libdir}/libboost_atomic.a
%{_libdir}/libboost_chrono.a
%{_libdir}/libboost_container.a
-%ifnarch x32
%{_libdir}/libboost_context.a
%{_libdir}/libboost_coroutine.a
-%endif
%{_libdir}/libboost_date_time.a
%{_libdir}/libboost_exception.a
%{_libdir}/libboost_filesystem.a
%{_libdir}/libboost_test_exec_monitor.a
%{_libdir}/libboost_timer.a
%{_libdir}/libboost_thread.a
+%{_libdir}/libboost_type_erasure.a
%{_libdir}/libboost_unit_test_framework.a
%{_libdir}/libboost_wave.a
%{_libdir}/libboost_wserialization.a
-%if %{with python}
+%if %{with python2} || %{with python3}
+%files python-devel-common
+%defattr(644,root,root,755)
+%{_includedir}/boost/python
+%{_includedir}/boost/python.hpp
+%endif
+
+%if %{with python2}
%files python
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_python.so.*.*.*
%files python-devel
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_python.so
-%{_includedir}/boost/python
-%{_includedir}/boost/python.hpp
%files python-static
%defattr(644,root,root,755)
%{_libdir}/libboost_python.a
%endif
+%if %{with python3}
+%files python3
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libboost_python3.so.*.*.*
+
+%files python3-devel
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libboost_python3.so
+
+%files python3-static
+%defattr(644,root,root,755)
+%{_libdir}/libboost_python3.a
+%endif
+
%files chrono
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_chrono.so.*.*.*
-%ifnarch x32
%files context
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_context.so.*.*.*
-%endif
%files date_time
%defattr(644,root,root,755)