# - split shared libs from core package into -iostreams/-serialization.
#
# Conditional build:
-%bcond_without python2 # without boost-python2 support
-%bcond_without python3 # without boost-python3 support
+%bcond_without python2 # boost-python[2] support
+%bcond_without python3 # boost-python3 support
+%bcond_without numpy # boost-numpy support
+%bcond_without doc # don't package documentation
%define fver %(echo %{version} | tr . _)
Summary: The Boost C++ Libraries
Summary(pl.UTF-8): Biblioteki C++ "Boost"
Name: boost
-Version: 1.61.0
-Release: 2
+Version: 1.81.0
+Release: 1
License: Boost Software License and others
Group: Libraries
-Source0: http://downloads.sourceforge.net/boost/%{name}_%{fver}.tar.bz2
-# Source0-md5: 6095876341956f65f9d35939ccea1a9f
+Source0: https://boostorg.jfrog.io/artifactory/main/release/%{version}/source/%{name}_%{fver}.tar.bz2
+# Source0-md5: 3276c0637d1be8687740c550237ef999
Patch0: %{name}-link.patch
-Patch1: %{name}-x32-context.patch
-Patch2: %{name}-clean-gcc-flags.patch
+Patch1: %{name}-clean-gcc-flags.patch
+Patch2: %{name}-fallthrough.patch
# FC Patches:
+Patch201: %{name}-python-abi_letters.patch
# https://svn.boost.org/trac/boost/ticket/5637
Patch203: %{name}-1.54.0-mpl-print.patch
# https://svn.boost.org/trac/boost/ticket/8881
BuildRequires: bzip2-devel
BuildRequires: expat-devel
BuildRequires: libicu-devel
-BuildRequires: libstdc++-devel
+BuildRequires: libstdc++-devel >= 6:4.7
BuildRequires: perl-base
-%{?with_python:BuildRequires: python-devel >= 2.2}
-%{?with_python3:BuildRequires: python3-devel}
+%if %{with python2}
+BuildRequires: python-devel >= 2.2
+%{?with_numpy:BuildRequires: python-numpy-devel}
+%endif
+%if %{with python3}
+BuildRequires: python3-devel
+%{?with_numpy:BuildRequires: python3-numpy-devel}
+%endif
+BuildRequires: rpm-build >= 4.6
BuildRequires: rpm-pythonprov
+BuildRequires: rpmbuild(macros) >= 1.750
BuildRequires: zlib-devel
-BuildConflicts: gcc = 5:3.3.1
+Obsoletes: boost-signals < 1.69
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%define specflags -DBOOST_IOSTREAMS_USE_DEPRECATED=1
+%define py2v %(echo %{py_ver} | tr -d .)
+%define py3v %(echo %{py3_ver} | tr -d .)
+
+%if %{_ver_ge "%{py3_ver}" "3.8"}
+%define py3v_suffix ""
+%else
+%define py3v_suffix "m"
+%endif
+
%description
The Boost web site provides free peer-reviewed portable C++ source
libraries. The emphasis is on libraries which work well with the C++
Requires: %{name}-chrono = %{version}-%{release}
Requires: %{name}-context = %{version}-%{release}
Requires: %{name}-date_time = %{version}-%{release}
+Requires: %{name}-fiber = %{version}-%{release}
Requires: %{name}-filesystem = %{version}-%{release}
Requires: %{name}-graph = %{version}-%{release}
+Requires: %{name}-json = %{version}-%{release}
Requires: %{name}-locale = %{version}-%{release}
Requires: %{name}-log = %{version}-%{release}
Requires: %{name}-program_options = %{version}-%{release}
Requires: %{name}-regex = %{version}-%{release}
-Requires: %{name}-signals = %{version}-%{release}
Requires: %{name}-system = %{version}-%{release}
Requires: %{name}-test = %{version}-%{release}
Requires: %{name}-thread = %{version}-%{release}
Requires: %{name}-timer = %{version}-%{release}
+Requires: %{name}-url = %{version}-%{release}
Requires: %{name}-wave = %{version}-%{release}
-Requires: libstdc++-devel
-Obsoletes: boost-any-devel
-Obsoletes: boost-array-devel
-Obsoletes: boost-asio
-Obsoletes: boost-bind-devel
-Obsoletes: boost-call_traits-devel
-Obsoletes: boost-compatibility-devel
-Obsoletes: boost-compose-devel
-Obsoletes: boost-compressed_pair-devel
-Obsoletes: boost-concept_check-devel
-Obsoletes: boost-conversion-devel
-Obsoletes: boost-crc-devel
-Obsoletes: boost-date_time-devel
-Obsoletes: boost-filesystem-devel
-Obsoletes: boost-graph-devel
-Obsoletes: boost-mem_fn-devel
-Obsoletes: boost-mpl-devel
-Obsoletes: boost-preprocessor-devel
-Obsoletes: boost-program_options-devel
-Obsoletes: boost-ref-devel
-Obsoletes: boost-regex-devel
-Obsoletes: boost-signals-devel
-Obsoletes: boost-spirit-devel
-Obsoletes: boost-statechart-devel
-Obsoletes: boost-static_assert-devel
-Obsoletes: boost-test-devel
-Obsoletes: boost-thread-devel
-Obsoletes: boost-tr1-devel
-Obsoletes: boost-type_traits-devel
-Obsoletes: boost-typeof-devel
-Obsoletes: boost-uBLAS-devel
-Obsoletes: boost-utility-devel
-Obsoletes: boost-wave-devel
-Obsoletes: boost-xpressive-devel
+Requires: libstdc++-devel >= 6:4.7
+Obsoletes: boost-any-devel < 1.35
+Obsoletes: boost-array-devel < 1.35
+Obsoletes: boost-asio < 1.3.0
+Obsoletes: boost-bind-devel < 1.35
+Obsoletes: boost-call_traits-devel < 1.34.1-2
+Obsoletes: boost-compatibility-devel < 1.35
+Obsoletes: boost-compose-devel < 1.31
+Obsoletes: boost-compressed_pair-devel < 1.35
+Obsoletes: boost-concept_check-devel < 1.33.1-1
+Obsoletes: boost-conversion-devel < 1.33.1-1
+Obsoletes: boost-crc-devel < 1.35
+Obsoletes: boost-date_time-devel < 1.35
+Obsoletes: boost-filesystem-devel < 1.35
+Obsoletes: boost-graph-devel < 1.35
+Obsoletes: boost-mem_fn-devel < 1.33.1-1
+Obsoletes: boost-mpl-devel < 1.33.1-1
+Obsoletes: boost-preprocessor-devel < 1.33.1-1
+Obsoletes: boost-program_options-devel < 1.35
+Obsoletes: boost-ref-devel < 1.34.1-2
+Obsoletes: boost-regex-devel < 1.35
+Obsoletes: boost-signals-devel < 1.35
+Obsoletes: boost-spirit-devel < 1.35
+Obsoletes: boost-statechart-devel < 1.35
+Obsoletes: boost-static_assert-devel < 1.33.1-1
+Obsoletes: boost-test-devel < 1.35
+Obsoletes: boost-thread-devel < 1.35
+Obsoletes: boost-tr1-devel < 1.35
+Obsoletes: boost-type_traits-devel < 1.33.1-1
+Obsoletes: boost-typeof-devel < 1.35
+Obsoletes: boost-uBLAS-devel < 1.35
+Obsoletes: boost-utility-devel < 1.33.1-1
+Obsoletes: boost-wave-devel < 1.35
+Obsoletes: boost-xpressive-devel < 1.35
%description devel
Header files for the Boost C++ libraries.
Summary(pl.UTF-8): Statyczne wersje podstawowych bibliotek C++ Boost
Group: Development/Libraries
Requires: %{name}-devel = %{version}-%{release}
-Obsoletes: boost-static < 1.33
+Obsoletes: boost-date_time-static < 1.35
+Obsoletes: boost-filesystem-static < 1.35
+Obsoletes: boost-graph-static < 1.35
+Obsoletes: boost-program_options-static < 1.35
+Obsoletes: boost-regex-static < 1.35
+Obsoletes: boost-signals-static < 1.35
+Obsoletes: boost-test-static < 1.35
+Obsoletes: boost-thread-static < 1.35
+Obsoletes: boost-wave-static < 1.35
%description static
Static version of base Boost C++ libraries.
Summary(pl.UTF-8): Pliki programistyczne biblioteki Boost.Python dla Pythona 3
Group: Development/Libraries
Requires: %{name}-devel = %{version}-%{release}
-Requires: %{name}-python3 = %{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 date_time -l pl.UTF-8
Zbiór bibliotek daty-czasu.
+%package fiber
+Summary: A framework for micro-/userland-threads (fibers) scheduled cooperatively
+Summary(pl.UTF-8): Szkielet mikrowątków przestrzeni użytkownika (fibers), szeregowanych kooperacyjnie
+Group: Libraries
+
+%description fiber
+boost::fiber provides a framework for micro-/userland-threads (fibers)
+scheduled cooperatively. The API contains classes and functions
+to manage and synchronize fibers similiar to boost.thread.
+
+%description fiber -l pl.UTF-8
+boost::fiber to szkielt mikrowątków przestrzeni użytkownika (fibers)
+szeregowanych kooperacyjnie. API zawiera klasy i funkcje służące do
+zarządzania i synchronizacji wątków podobne do boost.thread.
+
%package filesystem
Summary: Portable paths, iteration over directories, and other useful filesystem operations
Summary(pl.UTF-8): Przenośne ścieżki, iteracje katalogów i inne użyteczne operacje na systemie plików
strukturach danych typu graf za pomocą algorytmów związanych z
grafami.
+%package json
+Summary: Boost.JSON - a portable C++ JSON library
+Summary(pl.UTF-8): Boost.JSON - przenośna biblioteka C++ dla formatu JSON
+Group: Development/Libraries
+
+%description json
+Boost.JSON is a portable C++ library which provides containers and
+algorithms that implement JavaScript Object Notation, or simply
+"JSON", a lightweight data-interchange format.
+
+%description json -l pl.UTF-8
+Boost.JSON to przenośna biblioteka C++, która dostarcza kontenery oraz
+algorytmy implementujące JavaScript Object Notation, lub po prostu
+"JSON", lekki format wymiany danych.
+
%package locale
Summary: Provide localization and Unicode handling tools for C++
Summary(pl.UTF-8): Narzędzia do obsługi lokalizacji i Unikodu w C++
%description regex -l pl.UTF-8
Biblioteka współdzielona do obsługi wyrażeń regularnych w C++.
-%package signals
-Summary: Signals & slots callback implementation
-Summary(pl.UTF-8): Implementacja sygnałów i slotów
-Group: Libraries
-Obsoletes: boost < 1.33
-
-%description signals
-The boost::signals library is an implementation of a signals and slots
-system.
-
-%description signals -l pl.UTF-8
-Biblioteka boost::signals jest implementacją systemu sygnałów i
-slotów.
-
%package system
Summary: Support for getting system specific error codes
Summary(pl.UTF-8): Wsparcie dla pobierania specyficznych dla systemu kodów błędów
%description timer -l pl.UTF-8
Klasy do obsługi pomiarów czasu, postępu i wyświetlania postępu.
+%package url
+Summary: Library for manipulating Uniform Resource Identifiers and Locators
+Summary(pl.UTF-8): Biblioteka do manipulacji Unfiform Resource Identifier i Locator
+Group: Libraries
+
+%description url
+Library for manipulating Uniform Resource Identifiers and Locators.
+
+%description url -l pl.UTF-8
+Biblioteka do manipulacji Unfiform Resource Identifier i Locator.
+
%package wave
Summary: Boost.Wave - a standard compliant C++ preprocessor library
Summary(pl.UTF-8): Boost.Wave - zgodna ze standardem biblioteka preprocesora C++
Summary: Boost C++ Library documentation
Summary(pl.UTF-8): Dokumentacja dla biblioteki Boost C++
Group: Documentation
-%if "%{_rpmversion}" >= "5"
BuildArch: noarch
-%endif
%description doc
Documentation for the Boost C++ Library.
%patch1 -p1
%patch2 -p1
+%patch201 -p1
%patch203 -p0
%patch221 -p1
+%if "%{cc_version}" < "6.0"
+CPPSTD="-std=c++11"
+%else
+CPPSTD=
+%endif
cat << EOF > tools/build/src/user-config.jam
-using gcc : %{cxx_version} : %{__cxx} : <cflags>"%{rpmcflags} -fPIC" <cxxflags>"%{rpmcxxflags} -fPIC" <linkflags>"%{rpmldflags}" ;
+using gcc : %{cxx_version} : %{__cxx} : <cflags>"%{rpmcflags} -fPIC" <cxxflags>"%{rpmcxxflags} $CPPSTD -fPIC" <linkflags>"%{rpmldflags}" ;
EOF
# cleanup backups after patching
--prefix=%{_prefix} \
-without-libraries=python
+# x32 detection need help (it's autodetected as address-model=32 abi=sysv, while context build expects address-model=64 abi=x32)
./b2 \
+ %{?__jobs:-j %{__jobs}} \
-d2 --toolset=gcc \
- variant=release \
+%ifarch x32
+ abi=x32 \
+ address-model=64 \
+%endif
debug-symbols=on \
inlining=on \
link=static,shared \
- threading=multi
+ threading=multi \
+ variant=release
%if %{with python3}
-echo "using python : %{py3_ver}m : %{py3_prefix} : %{py3_incdir} ;" >> project-config.jam
+echo "using python : %{py3_ver} : %{py3_prefix} : %{py3_incdir} : : : : %{py3v_suffix} ;" >> project-config.jam
./b2 \
- --with-python python=%{py3_ver}m \
+ %{?__jobs:-j %{__jobs}} \
+ --with-python python=%{py3_ver} \
-a -d2 --toolset=gcc \
- variant=release \
debug-symbols=on \
inlining=on \
link=static,shared \
- threading=multi
+ threading=multi \
+ variant=release
%endif
%if %{with python2}
+%{__sed} -i -e '/^using python : 3/d' project-config.jam
echo "using python : %{py_ver} : %{py_prefix} : %{py_incdir} ;" >> project-config.jam
./b2 \
+ %{?__jobs:-j %{__jobs}} \
--with-python python=%{py_ver} \
-a -d2 --toolset=gcc \
- variant=release \
debug-symbols=on \
inlining=on \
link=static,shared \
- threading=multi
+ threading=multi \
+ variant=release
%endif
%install
install -p stage/lib/lib*.so.*.*.* $RPM_BUILD_ROOT%{_libdir}
cp -a stage/lib/lib*.so $RPM_BUILD_ROOT%{_libdir}
+%if %{with doc}
# documentation
install -d $RPM_BUILD_ROOT%{_docdir}/boost-%{version}
fi
done
}; installdocs
+%endif
%clean
rm -rf $RPM_BUILD_ROOT
%post date_time -p /sbin/ldconfig
%postun date_time -p /sbin/ldconfig
+%post fiber -p /sbin/ldconfig
+%postun fiber -p /sbin/ldconfig
+
%post filesystem -p /sbin/ldconfig
%postun filesystem -p /sbin/ldconfig
%post graph -p /sbin/ldconfig
%postun graph -p /sbin/ldconfig
+%post json -p /sbin/ldconfig
+%postun json -p /sbin/ldconfig
+
%post locale -p /sbin/ldconfig
%postun locale -p /sbin/ldconfig
%post regex -p /sbin/ldconfig
%postun regex -p /sbin/ldconfig
-%post signals -p /sbin/ldconfig
-%postun signals -p /sbin/ldconfig
-
%post system -p /sbin/ldconfig
%postun system -p /sbin/ldconfig
%post timer -p /sbin/ldconfig
%postun timer -p /sbin/ldconfig
+%post url -p /sbin/ldconfig
+%postun url -p /sbin/ldconfig
+
%post wave -p /sbin/ldconfig
%postun wave -p /sbin/ldconfig
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_atomic.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_container.so.*.*.*
+%attr(755,root,root) %{_libdir}/libboost_contract.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_coroutine.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_iostreams.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_math_*.so.*.*.*
+%attr(755,root,root) %{_libdir}/libboost_nowide.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_random.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_serialization.so.*.*.*
+%attr(755,root,root) %{_libdir}/libboost_stacktrace_*.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_type_erasure.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_wserialization.so.*.*.*
%attr(755,root,root) %{_libdir}/libboost_chrono.so
%attr(755,root,root) %{_libdir}/libboost_container.so
%attr(755,root,root) %{_libdir}/libboost_context.so
+%attr(755,root,root) %{_libdir}/libboost_contract.so
%attr(755,root,root) %{_libdir}/libboost_coroutine.so
%attr(755,root,root) %{_libdir}/libboost_date_time.so
+%attr(755,root,root) %{_libdir}/libboost_fiber.so
%attr(755,root,root) %{_libdir}/libboost_filesystem.so
%attr(755,root,root) %{_libdir}/libboost_graph.so
%attr(755,root,root) %{_libdir}/libboost_iostreams.so
+%attr(755,root,root) %{_libdir}/libboost_json.so
%attr(755,root,root) %{_libdir}/libboost_locale.so
%attr(755,root,root) %{_libdir}/libboost_log.so
%attr(755,root,root) %{_libdir}/libboost_log_setup.so
%attr(755,root,root) %{_libdir}/libboost_math_*.so
+%attr(755,root,root) %{_libdir}/libboost_nowide.so
%attr(755,root,root) %{_libdir}/libboost_prg_exec_monitor.so
%attr(755,root,root) %{_libdir}/libboost_program_options.so
%attr(755,root,root) %{_libdir}/libboost_regex.so
%attr(755,root,root) %{_libdir}/libboost_random.so
%attr(755,root,root) %{_libdir}/libboost_serialization.so
-%attr(755,root,root) %{_libdir}/libboost_signals.so
+%attr(755,root,root) %{_libdir}/libboost_stacktrace_*.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_url.so
%attr(755,root,root) %{_libdir}/libboost_wave.so
%attr(755,root,root) %{_libdir}/libboost_wserialization.so
%{_includedir}/boost
%{_libdir}/libboost_chrono.a
%{_libdir}/libboost_container.a
%{_libdir}/libboost_context.a
+%{_libdir}/libboost_contract.a
%{_libdir}/libboost_coroutine.a
%{_libdir}/libboost_date_time.a
%{_libdir}/libboost_exception.a
+%{_libdir}/libboost_fiber.a
%{_libdir}/libboost_filesystem.a
%{_libdir}/libboost_graph.a
%{_libdir}/libboost_iostreams.a
+%{_libdir}/libboost_json.a
%{_libdir}/libboost_locale.a
%{_libdir}/libboost_log.a
%{_libdir}/libboost_log_setup.a
%{_libdir}/libboost_math_*.a
+%{_libdir}/libboost_nowide.a
%{_libdir}/libboost_prg_exec_monitor.a
%{_libdir}/libboost_program_options.a
%{_libdir}/libboost_random.a
%{_libdir}/libboost_regex.a
%{_libdir}/libboost_serialization.a
-%{_libdir}/libboost_signals.a
+%{_libdir}/libboost_stacktrace_*.a
%{_libdir}/libboost_system.a
%{_libdir}/libboost_test_exec_monitor.a
%{_libdir}/libboost_timer.a
+%{_libdir}/libboost_url.a
%{_libdir}/libboost_thread.a
%{_libdir}/libboost_type_erasure.a
%{_libdir}/libboost_unit_test_framework.a
%if %{with python2}
%files python
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libboost_python.so.*.*.*
+%if %{with numpy}
+%attr(755,root,root) %{_libdir}/libboost_numpy%{py2v}.so.*.*.*
+%endif
+%attr(755,root,root) %{_libdir}/libboost_python%{py2v}.so.*.*.*
%files python-devel
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libboost_python.so
+%if %{with numpy}
+%attr(755,root,root) %{_libdir}/libboost_numpy%{py2v}.so
+%endif
+%attr(755,root,root) %{_libdir}/libboost_python%{py2v}.so
%files python-static
%defattr(644,root,root,755)
-%{_libdir}/libboost_python.a
+%if %{with numpy}
+%{_libdir}/libboost_numpy%{py2v}.a
+%endif
+%{_libdir}/libboost_python%{py2v}.a
%endif
%if %{with python3}
%files python3
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libboost_python3.so.*.*.*
+%if %{with numpy}
+%attr(755,root,root) %{_libdir}/libboost_numpy%{py3v}.so.*.*.*
+%endif
+%attr(755,root,root) %{_libdir}/libboost_python%{py3v}.so.*.*.*
%files python3-devel
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libboost_python3.so
+%if %{with numpy}
+%attr(755,root,root) %{_libdir}/libboost_numpy%{py3v}.so
+%endif
+%attr(755,root,root) %{_libdir}/libboost_python%{py3v}.so
%files python3-static
%defattr(644,root,root,755)
-%{_libdir}/libboost_python3.a
+%if %{with numpy}
+%{_libdir}/libboost_numpy%{py3v}.a
+%endif
+%{_libdir}/libboost_python%{py3v}.a
%endif
%files chrono
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_date_time.so.*.*.*
+%files fiber
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libboost_fiber.so.*.*.*
+
%files filesystem
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_filesystem.so.*.*.*
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_graph.so.*.*.*
+%files json
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libboost_json.so.*.*.*
+
%files locale
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_locale.so.*.*.*
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_regex.so.*.*.*
-%files signals
-%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libboost_signals.so.*.*.*
-
%files system
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_system.so.*.*.*
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_timer.so.*.*.*
+%files url
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_libdir}/libboost_url.so.*.*.*
+
%files wave
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libboost_wave.so.*.*.*
+%if %{with doc}
%files doc
%defattr(644,root,root,755)
%{_docdir}/%{name}-%{version}
+%endif