diff --git a/b2.1 b/b2.1 new file mode 100644 index 0000000000000000000000000000000000000000..130814b9d94aed12d7d5956d72ddbacd63aad258 --- /dev/null +++ b/b2.1 @@ -0,0 +1,144 @@ +.TH "b2" 1 "Sat Nov 19 2011" "Doxygen" \" -*- nroff -*- +.ad l +.nh +.SH NAME +b2 \- Command-line utility to build Boost-related C++ projects with Boost\&.Build +.SH "SYNOPSIS" +.PP +\fBb2\fP \fC[-a] [-dx] [-fx] [-jx] [-lx] [-n] [-ox] [-px] [-q] [-sx=y] [-tx] [-v] [--x]\fP +.PP +\fIb2\fP accepts the following options: +.PP +\fB-a\fP +.br + Build all targets, even if they are current +.PP +\fB-dx\fP +.br + Set the debug level to x (0-9) +.PP +\fB-fx\fP +.br + Read x instead of Jambase +.PP +\fB-jx\fP +.br + Run up to x shell commands concurrently +.PP +\fB-lx\fP +.br + Limit actions to x number of seconds after which they are stopped +.PP +\fB-n\fP +.br + Don't actually execute the updating actions +.PP +\fB-ox\fP +.br + Write the updating actions to file x +.PP +\fB-px\fP +.br + x=0, pipes action stdout and stderr merged into action output +.PP +\fB-q\fP +.br + Quit quickly as soon as a target fails +.PP +\fB-sx=y\fP +.br + Set variable x=y, overriding environment +.PP +\fB-tx\fP +.br + Rebuild x, even if it is up-to-date +.PP +\fB-v\fP +.br + Print the version of b2 and exit +.PP +\fB--x\fP +.br + Option is ignored +.SH "DESCRIPTION" +.PP +This section provides the information necessary to create your own projects using \fIBoost\&.Build\fP The information provided here is relatively high-level, and Chapter 6, Reference as well as the on-line help system must be used to obtain low-level documentation (see --help) +.PP +\fIBoost\&.Build\fP actually consists of two parts - \fIBoost\&.Jam\fP, a build engine with its own interpreted language, and \fIBoost\&.Build\fP itself, implemented in \fIBoost\&.Jam's\fP language\&. The chain of events when you type b2 on the command line is as follows: +.IP "\(bu" 2 +\fIBoost\&.Jam\fP tries to find \fIBoost\&.Build\fP and loads the top-level module\&. The exact process is described in the section called “Initialization” +.PP +.PP +.IP "\(bu" 2 +The top-level module loads user-defined configuration files, \fIuser-config\&.jam\fP and \fIsite-config\&.jam\fP, which define available toolsets +.PP +.PP +.IP "\(bu" 2 +The \fIJamfile\fP in the current directory is read That in turn might cause reading of further Jamfiles\&. As a result, a tree of projects is created, with targets inside projects +.PP +.PP +.IP "\(bu" 2 +Finally, using the build request specified on the command line, \fIBoost\&.Build\fP decides which targets should be built and how\&. That information is passed back to \fIBoost\&.Jam\fP, which takes care of actually running the scheduled build action commands +.PP +.PP +So, to be able to successfully use \fIBoost\&.Build\fP, you need to know only four things: +.IP "\(bu" 2 +How to configure \fIBoost\&.Build\fP (http://www.boost.org/boost-build2/doc/html/bbv2/overview/configuration.html) +.IP "\(bu" 2 +How to declare targets in Jamfiles (http://www.boost.org/boost-build2/doc/html/bbv2/overview/targets.html) +.IP "\(bu" 2 +How the build process works (http://www.boost.org/boost-build2/doc/html/bbv2/overview/build_process.html) +.PP +.PP +Some Basics about the \fIBoost\&.Jam\fP language\&. See the section called “Boost\&.Jam Language” (http://www.boost.org/boost-build2/doc/html/bbv2/overview/jam_language.html) +.SH "CONCEPTS" +.PP +\fIBoost\&.Build\fP has a few unique concepts that are introduced in this section\&. The best way to explain the concepts is by comparison with more classical build tools +.PP +When using any flavour of make, you directly specify targets and commands that are used to create them from other target\&. The below example creates a\&.o from a\&.c using a hardcoded compiler invocation command +.PP +a\&.o: a\&.c +.br + g++ -o a\&.o -g a\&.c +.PP +This is rather low-level description mechanism and it is hard to adjust commands, options, and sets of created targets depending on the used compiler and operating system\&. +.PP +To improve portability, most modern build system provide a set of higher-level functions that can be used in build description files\&. Consider this example: +.PP +add_program ('a', 'a\&.c') +.br +.PP +This is a function call that creates targets necessary to create executable file from source file a\&.c\&. Depending on configured properties, different commands line may be used\&. However, \fIadd_program\fP is higher-level, but rather thin level All targets are created immediately when build description is parsed, which makes it impossible to perform multi-variant builds\&. Often, change in any build property requires complete reconfiguration of the build tree +.PP +In order to support true multivariant builds, Boost\&.Build introduces the concept of metatarget—object that is created when build description is parsed and can be later called with specific build properties to generate actual targets +.PP +Consider an example: +.PP +exe a : a\&.cpp ; +.br +.PP +When this declaration is parsed, \fIBoost\&.Build\fP creates a metatarget, but does not yet decides what files must be created, or what commands must be used\&. After all build files are parsed, Boost\&.Build considers properties requested on the command line\&. Supposed you have invoked \fIBoost\&.Build\fP with: +.PP +\fIb2\fP toolset=gcc toolset=msvc +.br +.PP +In that case, the metatarget will be called twice, once with toolset=gcc and once with toolset=msvc\&. Both invocations will produce concrete targets, that will have different extensions and use different command lines\&. Another key concept is build property\&. Build property is a variable that affects the build process\&. It can be specified on the command line, and is passed when calling a metatarget +.PP +While all build tools have a similar mechanism, \fIBoost\&.Build\fP differs by requiring that all build properties are declared in advance, and providing a large set of properties with portable semantics +.PP +The final concept is property propagation\&. Boost\&.Build does not require that every metatarget is called with the same properties\&. Instead, the 'top-level' metatargets are called with the properties specified on the command line Each metatarget can elect to augment or override some properties (in particular, using the requirements mechanism, see the section called “Requirements”: http://www.boost.org/boost-build2/doc/html/bbv2/overview/targets.html#bbv2.overview.targets.requirements) Then, the dependency metatargets are called with modified properties and produce concrete targets that are then used in build process Of course, dependency metatargets maybe in turn modify build properties and have dependencies of their own\&. +.PP +For more in-depth treatment of the requirements and concepts, you may refer to SYRCoSE 2009 Boost\&.Build article (http://syrcose.ispras.ru/2009/files/04_paper.pdf)\&. +.SH "SEE ALSO" +.PP +\fBboost-libraries\fP(3) +.SH "SUPPORT" +.PP +Please report any bugs to https://svn.boost.org/trac/boost/ +.SH "COPYRIGHT" +.PP +Boost Software License - Version 1\&.0 - August 17th, 2003 +.PP +See the LICENSE_1_0\&.txt file for more information on that license, or directly on Internet: +.br + http://www.boost.org/LICENSE_1_0.txt diff --git a/boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch b/boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch new file mode 100644 index 0000000000000000000000000000000000000000..ca4e6ba95e141670f50cf34f223ac35ce18857ab --- /dev/null +++ b/boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch @@ -0,0 +1,71 @@ +From 62e7321669f66a90e2a90c8f31af34f59ebc5d7a Mon Sep 17 00:00:00 2001 +From: Dmitry Arkhipov +Date: Thu, 9 Dec 2021 08:11:57 +0300 +Subject: [PATCH] Don't skip install targets if there's no in ureqs + +--- + tools/build/src/tools/stage.jam | 4 ++++ + tools/build/test/install_build_no.py | 26 ++++++++++++++++++++++++++ + tools/build/test/test_all.py | 1 + + 3 files changed, 31 insertions(+) + create mode 100755 test/install_build_no.py + +diff --git a/tools/build/src/tools/stage.jam b/tools/build/src/tools/stage.jam +index c5f02e3ba4..325129dc81 100644 +--- a/tools/build/src/tools/stage.jam ++++ b/tools/build/src/tools/stage.jam +@@ -478,6 +478,10 @@ class install-target-class : basic-target + return [ sequence.unique $(result2) ] ; + } + ++ rule skip-from-usage-requirements ( ) ++ { ++ } ++ + # Returns true iff 'type' is subtype of some element of 'types-to-include'. + # + local rule include-type ( type : types-to-include * ) +diff --git a/tools/build/test/install_build_no.py b/tools/build/test/install_build_no.py +new file mode 100755 +index 0000000000..0ccf3c5cc6 +--- /dev/null ++++ b/tools/build/test/install_build_no.py +@@ -0,0 +1,26 @@ ++#!/usr/bin/python ++ ++# Copyright 2021 Dmitry Arkhipov (grisumbras@gmail.com) ++# Distributed under the Boost Software License, Version 1.0. ++# (See accompanying file LICENSE.txt or https://www.bfgroup.xyz/b2/LICENSE.txt) ++ ++# Check that no in usage-requirements of dependencies does not affect ++# install rule, i.e. a skipped installed target does not affect insallation of ++# other targets. ++ ++import BoostBuild ++ ++t = BoostBuild.Tester() ++ ++t.write("a.cpp", "int main() {}\n") ++ ++t.write("jamroot.jam", """ ++make x : : maker : no ; ++exe a : a.cpp ; ++install install : x a ; ++""") ++ ++t.run_build_system() ++t.expect_addition("install/a.exe") ++ ++t.cleanup() +diff --git a/tools/build/test/test_all.py b/tools/build/test/test_all.py +index b7ef5ad701..9ed729d017 100644 +--- a/tools/build/test/test_all.py ++++ b/tools/build/test/test_all.py +@@ -250,6 +250,7 @@ def reorder_tests(tests, first_test): + "inherit_toolset", + "inherited_dependency", + "inline", ++ "install_build_no", + "libjpeg", + "liblzma", + "libpng", diff --git a/boost.spec b/boost.spec new file mode 100644 index 0000000000000000000000000000000000000000..897e8b550dd7cb4cdf442f8a2a9a658fb90c01b8 --- /dev/null +++ b/boost.spec @@ -0,0 +1,1219 @@ +%define anolis_release 1 +%global boost_docdir __tmp_docdir +%global boost_examplesdir __tmp_examplesdir + +%if 0%{?flatpak} +# For bundling in Flatpak, currently build without mpich and openmpi, +# which aren't needed and cause prefix=/app errors. +%bcond_with mpich +%bcond_with openmpi +%else +# All arches have mpich +%bcond_without mpich +%bcond_without openmpi +%endif + +%ifnarch x86_64 aarch64 + %bcond_with context +%else + %bcond_without context +%endif + +%bcond_without python3 + +%ifnarch x86_64 + %bcond_with quadmath +%else + %bcond_without quadmath +%endif + +Name: boost +%global real_name boost +Summary: The free peer-reviewed portable C++ source libraries +Version: 1.78.0 +Release: %{anolis_release}%{dist} +License: Boost and MIT and Python +BuildRequires: lua-posix + +# Replace each . with _ in %%{version} +%global version_enc %{lua: + local ver = rpm.expand("%{version}") + ver = ver:gsub("%.", "_") + print(ver) +} +%global toplev_dirname %{real_name}_%{version_enc} +URL: http://www.boost.org + +Source0: https://boostorg.jfrog.io/artifactory/main/release/%{version}/source/%{name}_%{version_enc}.tar.gz +Source1: libboost_thread.so +# Add a manual page for b2, based on the online documentation: +# http://www.boost.org/boost-build2/doc/html/bbv2/overview.html +Source2: b2.1 +%global sonamever %{version} + +# boost is an "umbrella" package that pulls in all boost shared library +# components, except for MPI sub-packages. Those are special in that +# there are alternative implementations to choose from (Open MPI and MPICH), +# and it's not a big burden to have interested parties install them explicitly. +# The subpackages that don't install shared libraries are also not pulled in +# (b2, build, doc, doctools, examples, static). +Requires: %{name}-atomic%{?_isa} = %{version}-%{release} +Requires: %{name}-chrono%{?_isa} = %{version}-%{release} +Requires: %{name}-container%{?_isa} = %{version}-%{release} +Requires: %{name}-contract%{?_isa} = %{version}-%{release} +%if %{with context} +Requires: %{name}-context%{?_isa} = %{version}-%{release} +Requires: %{name}-coroutine%{?_isa} = %{version}-%{release} +%endif +Requires: %{name}-date-time%{?_isa} = %{version}-%{release} +%if %{with context} +Requires: %{name}-fiber%{?_isa} = %{version}-%{release} +%endif +Requires: %{name}-filesystem%{?_isa} = %{version}-%{release} +Requires: %{name}-graph%{?_isa} = %{version}-%{release} +Requires: %{name}-iostreams%{?_isa} = %{version}-%{release} +Requires: %{name}-locale%{?_isa} = %{version}-%{release} +Requires: %{name}-log%{?_isa} = %{version}-%{release} +Requires: %{name}-math%{?_isa} = %{version}-%{release} +Requires: %{name}-nowide%{?_isa} = %{version}-%{release} +Requires: %{name}-program-options%{?_isa} = %{version}-%{release} +%if %{with python3} +Requires: %{name}-python3%{?_isa} = %{version}-%{release} +%endif +Requires: %{name}-random%{?_isa} = %{version}-%{release} +Requires: %{name}-regex%{?_isa} = %{version}-%{release} +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} +Requires: %{name}-stacktrace%{?_isa} = %{version}-%{release} +Requires: %{name}-system%{?_isa} = %{version}-%{release} +Requires: %{name}-test%{?_isa} = %{version}-%{release} +Requires: %{name}-thread%{?_isa} = %{version}-%{release} +Requires: %{name}-timer%{?_isa} = %{version}-%{release} +Requires: %{name}-type_erasure%{?_isa} = %{version}-%{release} +Requires: %{name}-wave%{?_isa} = %{version}-%{release} + +%if %{with python3} +Recommends: (boost-numpy3 if python3-numpy) +%endif + +BuildRequires: python3 +BuildRequires: gcc-c++ +BuildRequires: m4 +BuildRequires: libstdc++-devel +BuildRequires: bzip2-devel +BuildRequires: zlib-devel +BuildRequires: xz-devel +%if %{with python3} +BuildRequires: python3-devel +BuildRequires: python3-numpy +%endif +BuildRequires: libicu-devel +%if %{with quadmath} +BuildRequires: libquadmath-devel +%endif +BuildRequires: bison + +# https://github.com/bfgroup/b2/pull/113 +Patch4: boost-1.78-build-Don-t-skip-install-targets-if-there-s-build-no-in-ureqs.patch + +%bcond_with tests +%bcond_with docs_generated + +%description +Boost provides free peer-reviewed portable C++ source libraries. The +emphasis is on libraries which work well with the C++ Standard +Library, in the hopes of establishing "existing practice" for +extensions and providing reference implementations so that the Boost +libraries are suitable for eventual standardization. (Some of the +libraries have already been included in the C++ 2011 standard and +others have been proposed to the C++ Standards Committee for inclusion +in future standards.) + +%package atomic +Summary: Run-time component of boost atomic library + +%description atomic + +Run-time support for Boost.Atomic, a library that provides atomic data +types and operations on these data types, as well as memory ordering +constraints required for coordinating multiple threads through atomic +variables. + +%package chrono +Summary: Run-time component of boost chrono library +Requires: %{name}-system%{?_isa} = %{version}-%{release} + +%description chrono + +Run-time support for Boost.Chrono, a set of useful time utilities. + +%package container +Summary: Run-time component of boost container library + +%description container + +Boost.Container library implements several well-known containers, +including STL containers. The aim of the library is to offer advanced +features not present in standard containers or to offer the latest +standard draft features for compilers that comply with C++03. + +%package contract +Summary: Run-time component of boost contract library + +%description contract + +Run-time support for boost contract library. +Contract programming for C++. All contract programming features are supported: +Subcontracting, class invariants, postconditions (with old and return values), +preconditions, customizable actions on assertion failure (e.g., terminate +or throw), optional compilation and checking of assertions, etc, +from Lorenzo Caminiti. + +%if %{with context} +%package context +Summary: Run-time component of boost context switching library + +%description context + +Run-time support for Boost.Context, a foundational library that +provides a sort of cooperative multitasking on a single thread. + +%package coroutine +Summary: Run-time component of boost coroutine library + +%description coroutine +Run-time support for Boost.Coroutine, a library that provides +generalized subroutines which allow multiple entry points for +suspending and resuming execution. + +%endif + +%package date-time +Summary: Run-time component of boost date-time library + +%description date-time + +Run-time support for Boost Date Time, a set of date-time libraries based +on generic programming concepts. + +%if %{with context} +%package fiber +Summary: Run-time component of boost fiber library + +%description fiber + +Run-time support for the Boost Fiber library, a framework for +micro-/userland-threads (fibers) scheduled cooperatively. +%endif + +%package filesystem +Summary: Run-time component of boost filesystem library +Requires: %{name}-system%{?_isa} = %{version}-%{release} + +%description filesystem + +Run-time support for the Boost Filesystem Library, which provides +portable facilities to query and manipulate paths, files, and +directories. + +%package graph +Summary: Run-time component of boost graph library +Requires: %{name}-regex%{?_isa} = %{version}-%{release} + +%description graph + +Run-time support for the BGL graph library. BGL interface and graph +components are generic, in the same sense as the Standard Template +Library (STL). + +%package iostreams +Summary: Run-time component of boost iostreams library + +%description iostreams + +Run-time support for Boost.Iostreams, a framework for defining streams, +stream buffers and i/o filters. + +%package json +Summary: Run-time component of boost json library + +%description json + +Run-time support for Boost.Json, a portable C++ library which provides +containers and algorithms that implement JavaScript Object Notation, or +simply "JSON" + +%package locale +Summary: Run-time component of boost locale library +Requires: %{name}-chrono%{?_isa} = %{version}-%{release} +Requires: %{name}-system%{?_isa} = %{version}-%{release} +Requires: %{name}-thread%{?_isa} = %{version}-%{release} + +%description locale + +Run-time support for Boost.Locale, a set of localization and Unicode +handling tools. + +%package log +Summary: Run-time component of boost logging library + +%description log + +Boost.Log library aims to make logging significantly easier for the +application developer. It provides a wide range of out-of-the-box +tools along with public interfaces for extending the library. + +%package math +Summary: Math functions for boost TR1 library + +%description math + +Run-time support for C99 and C++ TR1 C-style Functions from the math +portion of Boost.TR1. + +%package nowide +Summary: Standard library functions with UTF-8 API on Windows +Obsoletes: boost-nowide <= 0.20190814 + +%description nowide + +Run-time support for Boost.Nowide. + +%if %{with python3} + +%package numpy3 +Summary: Run-time component of boost numpy library for Python 3 +Requires: %{name}-python3%{?_isa} = %{version}-%{release} +Requires: python3-numpy + +%description numpy3 + +The Boost Python Library is a framework for interfacing Python and +C++. It allows you to quickly and seamlessly expose C++ classes, +functions and objects to Python, and vice versa, using no special +tools -- just your C++ compiler. This package contains run-time +support for the NumPy extension of the Boost Python Library for Python 3. + +%endif + +%package program-options +Summary: Run-time component of boost program_options library + +%description program-options + +Run-time support of boost program options library, which allows program +developers to obtain (name, value) pairs from the user, via +conventional methods such as command-line and configuration file. + +%if %{with python3} +%package python3 +Summary: Run-time component of boost python library for Python 3 +Requires: python(abi) = %{python3_version} + +%description python3 + +The Boost Python Library is a framework for interfacing Python and +C++. It allows you to quickly and seamlessly expose C++ classes, +functions and objects to Python, and vice versa, using no special +tools -- just your C++ compiler. This package contains run-time +support for the Boost Python Library compiled for Python 3. +%endif + +%package random +Summary: Run-time component of boost random library + +%description random + +Run-time support for boost random library. + +%package regex +Summary: Run-time component of boost regular expression library + +%description regex + +Run-time support for boost regular expression library. + +%package serialization +Summary: Run-time component of boost serialization library + +%description serialization + +Run-time support for serialization for persistence and marshaling. + +%package stacktrace +Summary: Run-time component of boost stacktrace library + +%description stacktrace + +Run-time component of the Boost stacktrace library. + +%package system +Summary: Run-time component of boost system support library + +%description system + +Run-time component of Boost operating system support library, including +the diagnostics support that is part of the C++11 standard library. + +%package test +Summary: Run-time component of boost test library + +%description test + +Run-time support for simple program testing, full unit testing, and for +program execution monitoring. + +%package thread +Summary: Run-time component of boost thread library +Requires: %{name}-system%{?_isa} = %{version}-%{release} + +%description thread + +Run-time component Boost.Thread library, which provides classes and +functions for managing multiple threads of execution, and for +synchronizing data between the threads or providing separate copies of +data specific to individual threads. + +%package timer +Summary: Run-time component of boost timer library +Requires: %{name}-chrono%{?_isa} = %{version}-%{release} +Requires: %{name}-system%{?_isa} = %{version}-%{release} + +%description timer + +"How long does my C++ code take to run?" +The Boost Timer library answers that question and does so portably, +with as little as one #include and one additional line of code. + +%package type_erasure +Summary: Run-time component of boost type erasure library +Requires: %{name}-chrono%{?_isa} = %{version}-%{release} +Requires: %{name}-system%{?_isa} = %{version}-%{release} + +%description type_erasure + +The Boost.TypeErasure library provides runtime polymorphism in C++ +that is more flexible than that provided by the core language. + +%package wave +Summary: Run-time component of boost C99/C++ preprocessing library +Requires: %{name}-chrono%{?_isa} = %{version}-%{release} +Requires: %{name}-date-time%{?_isa} = %{version}-%{release} +Requires: %{name}-filesystem%{?_isa} = %{version}-%{release} +Requires: %{name}-system%{?_isa} = %{version}-%{release} +Requires: %{name}-thread%{?_isa} = %{version}-%{release} + +%description wave + +Run-time support for the Boost.Wave library, a Standards conforming, +and highly configurable implementation of the mandated C99/C++ +preprocessor functionality. + +%package devel +Summary: The Boost C++ headers and shared development libraries +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: libicu-devel%{?_isa} +%if %{with quadmath} +Requires: libquadmath-devel%{?_isa} +%endif +%if %{with python3} +# Require boost-numpy3 here, because main boost metapackage only Recommends: it +Requires: %{name}-numpy3%{?_isa} = %{version}-%{release} +Obsoletes: %{name}-python3-devel < 1.69.0 +Provides: %{name}-python3-devel = %{version}-%{release} +Provides: %{name}-python3-devel%{?_isa} = %{version}-%{release} +%endif +Obsoletes: boost-nowide-devel <= 0.20190814 +Provides: boost-nowide-devel = %{version} +Provides: boost-nowide-devel%{?_isa} = %{version} + +%description devel +Headers and shared object symbolic links for the Boost C++ libraries. + +%package static +Summary: The Boost C++ static development libraries +Requires: %{name}-devel%{?_isa} = %{version}-%{release} + +%description static +Static Boost C++ libraries. + +%package doc +Summary: HTML documentation for the Boost C++ libraries + +%description doc +This package contains the documentation in the HTML format of the Boost C++ +libraries. The documentation provides the same content as that on the Boost +web page (http://www.boost.org/doc/libs/%{version_enc}). + +%package examples +Summary: Source examples for the Boost C++ libraries +Requires: %{name}-devel = %{version}-%{release} + +%description examples +This package contains example source files distributed with boost. + + +%if %{with openmpi} + +%package openmpi +Summary: Run-time component of Boost.MPI library +BuildRequires: openmpi-devel +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} + +%description openmpi + +Run-time support for Boost.MPI-OpenMPI, a library providing a clean C++ +API over the OpenMPI implementation of MPI. + +%package openmpi-devel +Summary: Shared library symbolic links for Boost.MPI +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-openmpi%{?_isa} = %{version}-%{release} +Requires: %{name}-graph-openmpi%{?_isa} = %{version}-%{release} + +%description openmpi-devel + +Devel package for Boost.MPI-OpenMPI, a library providing a clean C++ +API over the OpenMPI implementation of MPI. + +%if %{with python3} + +%package openmpi-python3 +Summary: Python 3 run-time component of Boost.MPI library +Requires: %{name}-openmpi%{?_isa} = %{version}-%{release} +Requires: %{name}-python3%{?_isa} = %{version}-%{release} +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} +Requires: python3-openmpi%{?_isa} + +%description openmpi-python3 + +Python 3 support for Boost.MPI-OpenMPI, a library providing a clean C++ +API over the OpenMPI implementation of MPI. + +%package openmpi-python3-devel +Summary: Shared library symbolic links for Boost.MPI Python 3 component +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-openmpi-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-openmpi-python3%{?_isa} = %{version}-%{release} + +%description openmpi-python3-devel + +Devel package for the Python 3 interface of Boost.MPI-OpenMPI, a library +providing a clean C++ API over the OpenMPI implementation of MPI. + +%endif + +%package graph-openmpi +Summary: Run-time component of parallel boost graph library +Requires: %{name}-openmpi%{?_isa} = %{version}-%{release} +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} + +%description graph-openmpi + +Run-time support for the Parallel BGL graph library. The interface and +graph components are generic, in the same sense as the Standard +Template Library (STL). This libraries in this package use OpenMPI +back-end to do the parallel work. + +%endif + + +%if %{with mpich} + +%package mpich +Summary: Run-time component of Boost.MPI library +BuildRequires: mpich-devel +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} + +%description mpich + +Run-time support for Boost.MPI-MPICH, a library providing a clean C++ +API over the MPICH implementation of MPI. + +%package mpich-devel +Summary: Shared library symbolic links for Boost.MPI +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-mpich%{?_isa} = %{version}-%{release} +Requires: %{name}-graph-mpich%{?_isa} = %{version}-%{release} + +%description mpich-devel + +Devel package for Boost.MPI-MPICH, a library providing a clean C++ +API over the MPICH implementation of MPI. + +%if %{with python3} + +%package mpich-python3 +Summary: Python 3 run-time component of Boost.MPI library +Requires: %{name}-mpich%{?_isa} = %{version}-%{release} +Requires: %{name}-python3%{?_isa} = %{version}-%{release} +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} +Requires: python3-mpich%{?_isa} + +%description mpich-python3 + +Python 3 support for Boost.MPI-MPICH, a library providing a clean C++ +API over the MPICH implementation of MPI. + +%package mpich-python3-devel +Summary: Shared library symbolic links for Boost.MPI Python 3 component +Requires: %{name}-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-mpich-devel%{?_isa} = %{version}-%{release} +Requires: %{name}-mpich-python3%{?_isa} = %{version}-%{release} + +%description mpich-python3-devel + +Devel package for the Python 3 interface of Boost.MPI-MPICH, a library +providing a clean C++ API over the MPICH implementation of MPI. + +%endif + +%package graph-mpich +Summary: Run-time component of parallel boost graph library +Requires: %{name}-mpich%{?_isa} = %{version}-%{release} +Requires: %{name}-serialization%{?_isa} = %{version}-%{release} + +%description graph-mpich + +Run-time support for the Parallel BGL graph library. The interface and +graph components are generic, in the same sense as the Standard +Template Library (STL). This libraries in this package use MPICH +back-end to do the parallel work. + +%endif + +%package build +Summary: Cross platform build system for C++ projects +Requires: %{name}-b2 +BuildArch: noarch + +%description build +Boost.Build is an easy way to build C++ projects, everywhere. You name +your pieces of executable and libraries and list their sources. Boost.Build +takes care about compiling your sources with the right options, +creating static and shared libraries, making pieces of executable, and other +chores -- whether you are using GCC, MSVC, or a dozen more supported +C++ compilers -- on Windows, OSX, Linux and commercial UNIX systems. + +%package doctools +Summary: Tools for working with Boost documentation +Requires: docbook-dtds +Requires: docbook-style-xsl + +%description doctools + +Tools for working with Boost documentation in BoostBook or QuickBook format. + +%package b2 +Summary: A low-level build tool +Obsoletes: boost-jam < 1.73.0 +Provides: boost-jam = %{version} +Provides: boost-jam%{?_isa} = %{version} + +%description b2 +B2 (formerly Boost.Jam) is the low-level build engine tool for Boost.Build. +Historically, B2 was based on on FTJam and on Perforce Jam but has grown +a number of significant features and is now developed independently. + +%prep + +%autosetup -p1 -n %{name}_%{version_enc} +%build +%set_build_flags +# Dump the versions being used into the build logs. +%if %{with python3} +PYTHON3_ABIFLAGS=$(/usr/bin/python3-config --abiflags) +: PYTHON3_VERSION=%{python3_version} +: PYTHON3_ABIFLAGS=${PYTHON3_ABIFLAGS} +%endif + +# There are many strict aliasing warnings, and it's not feasible to go +# through them all at this time. +# There are also lots of noisy but harmless unused local typedef warnings. +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing -Wno-unused-local-typedefs -Wno-deprecated-declarations" +export RPM_LD_FLAGS + +cat > ./tools/build/src/user-config.jam << "EOF" +import os ; +local RPM_OPT_FLAGS = [ os.environ RPM_OPT_FLAGS ] ; +local RPM_LD_FLAGS = [ os.environ RPM_LD_FLAGS ] ; + +using %{toolchain} : : : $(RPM_OPT_FLAGS) $(RPM_LD_FLAGS) ; +%if %{with openmpi} || %{with mpich} +using mpi ; +%endif +EOF + +%if %{with python3} +cat >> ./tools/build/src/user-config.jam << EOF +using python : %{python3_version} : /usr/bin/python3 : /usr/include/python%{python3_version}${PYTHON3_ABIFLAGS} : : : ; +EOF +%endif + +./bootstrap.sh --with-toolset=%{toolchain} --with-icu + +# N.B. When we build the following with PCH, parts of boost (math +# library in particular) end up being built second time during +# installation. Unsure why that is, but all sub-builds need to be +# built with pch=off to avoid this. + +echo ============================= build serial ================== +./b2 -d+2 -q %{?_smp_mflags} \ + --build-dir=serial \ +%if !%{with context} + --without-context --without-coroutine \ + --without-fiber \ +%endif + variant=release threading=multi debug-symbols=on pch=off \ +%if %{with python3} + python=%{python3_version} \ +%endif + stage + +# See libs/thread/build/Jamfile.v2 for where this file comes from. +if [ $(find serial -type f -name has_atomic_flag_lockfree \ + -print -quit | wc -l) -ne 0 ]; then + DEF=D +else + DEF=U +fi + +m4 -${DEF}HAS_ATOMIC_FLAG_LOCKFREE -DVERSION=%{version} \ + %{SOURCE1} > $(basename %{SOURCE1}) + +# Build MPI parts of Boost with OpenMPI support + +%if %{with openmpi} || %{with mpich} +# First, purge all modules so that user environment does not conflict +# with the build. +module purge ||: +%endif + +%if %{with openmpi} +%{_openmpi_load} + +%if %{with python3} +echo ============================= build $MPI_COMPILER ================== +./b2 -d+2 -q %{?_smp_mflags} \ + --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \ + variant=release threading=multi debug-symbols=on pch=off \ + python=%{python3_version} stage +%endif + +%{_openmpi_unload} +export PATH=/bin${PATH:+:}$PATH +%endif + +# Build MPI parts of Boost with MPICH support +%if %{with mpich} +%{_mpich_load} + +%if %{with python3} +echo ============================= build $MPI_COMPILER ================== +./b2 -d+2 -q %{?_smp_mflags} \ + --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \ + variant=release threading=multi debug-symbols=on pch=off \ + python=%{python3_version} stage +%endif + +%{_mpich_unload} +export PATH=/bin${PATH:+:}$PATH +%endif + +echo ============================= build Boost.Build ================== +(cd tools/build + ./bootstrap.sh --with-toolset=%{toolchain}) + +%check +: + + +%install +cd %{_builddir}/%{toplev_dirname} + +%if %{with openmpi} || %{with mpich} +# First, purge all modules so that user environment does not conflict +# with the build. +module purge ||: +%endif + +%if %{with openmpi} +%{_openmpi_load} + +%if %{with python3} +echo ============================= install $MPI_COMPILER ================== +./b2 -q %{?_smp_mflags} \ + --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \ + --stagedir=${RPM_BUILD_ROOT}${MPI_HOME} \ + variant=release threading=multi debug-symbols=on pch=off \ + python=%{python3_version} stage + +# Move Python module to proper location for automatic loading +mkdir -p ${RPM_BUILD_ROOT}%{python3_sitearch}/openmpi/boost +touch ${RPM_BUILD_ROOT}%{python3_sitearch}/openmpi/boost/__init__.py +mv ${RPM_BUILD_ROOT}${MPI_HOME}/lib/boost-python%{python3_version}/mpi.so \ + ${RPM_BUILD_ROOT}%{python3_sitearch}/openmpi/boost/ +%endif + +# Remove generic parts of boost that were built for dependencies. +rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_{python,{w,}serialization}* +rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_numpy* + +# Remove cmake files (some of these are duplicates of the generic bits anyway). +rm -r ${RPM_BUILD_ROOT}${MPI_HOME}/lib/cmake + +%{_openmpi_unload} +export PATH=/bin${PATH:+:}$PATH +%endif + +%if %{with mpich} +%{_mpich_load} + +%if %{with python3} +echo ============================= install $MPI_COMPILER ================== +./b2 -q %{?_smp_mflags} \ + --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \ + --stagedir=${RPM_BUILD_ROOT}${MPI_HOME} \ + variant=release threading=multi debug-symbols=on pch=off \ + python=%{python3_version} stage + +# Move Python module to proper location for automatic loading +mkdir -p ${RPM_BUILD_ROOT}%{python3_sitearch}/mpich/boost +touch ${RPM_BUILD_ROOT}%{python3_sitearch}/mpich/boost/__init__.py +mv ${RPM_BUILD_ROOT}${MPI_HOME}/lib/boost-python%{python3_version}/mpi.so \ + ${RPM_BUILD_ROOT}%{python3_sitearch}/mpich/boost/ +%endif + +# Remove generic parts of boost that were built for dependencies. +rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_{python,{w,}serialization}* +rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_numpy* + +# Remove cmake files (some of these are duplicates of the generic bits anyway). +rm -r ${RPM_BUILD_ROOT}${MPI_HOME}/lib/cmake + +%{_mpich_unload} +export PATH=/bin${PATH:+:}$PATH +%endif + +echo ============================= install serial ================== +./b2 -d+2 -q %{?_smp_mflags} \ + --build-dir=serial \ +%if !%{with context} + --without-context --without-coroutine \ + --without-fiber \ +%endif + --prefix=$RPM_BUILD_ROOT%{_prefix} \ + --libdir=$RPM_BUILD_ROOT%{_libdir} \ + variant=release threading=multi debug-symbols=on pch=off \ +%if %{with python3} + python=%{python3_version} \ +%endif + install + +# Override DSO symlink with a linker script. See the linker script +# itself for details of why we need to do this. +[ -f $RPM_BUILD_ROOT%{_libdir}/libboost_thread.so ] # Must be present +rm -f $RPM_BUILD_ROOT%{_libdir}/libboost_thread.so +install -p -m 644 $(basename %{SOURCE1}) $RPM_BUILD_ROOT%{_libdir}/ + +# Remove cmake files until we know somebody wants them. +rm -r $RPM_BUILD_ROOT/%{_libdir}/cmake + +echo ============================= install Boost.Build ================== +(cd tools/build + ./b2 --prefix=$RPM_BUILD_ROOT%{_prefix} install + # Fix some permissions + chmod +x $RPM_BUILD_ROOT%{_datadir}/boost-build/src/tools/doxproc.py + # Fix shebang using unversioned python + sed -i '1s@^#!/usr/bin.python$@&3@' $RPM_BUILD_ROOT%{_datadir}/boost-build/src/tools/doxproc.py + # Empty file + rm $RPM_BUILD_ROOT%{_datadir}/boost-build/src/tools/doxygen/windows-paths-check.hpp + rm -f $RPM_BUILD_ROOT%{_datadir}/boost-build/src/tools/doxygen/windows-paths-check.hpp + # Install the manual page + %{__install} -p -m 644 %{SOURCE2} -D $RPM_BUILD_ROOT%{_mandir}/man1/b2.1 +) + +echo ============================= install Boost.QuickBook ================== +(cd tools/quickbook + ../build/b2 --prefix=$RPM_BUILD_ROOT%{_prefix} + %{__install} -p -m 755 ../../dist/bin/quickbook $RPM_BUILD_ROOT%{_bindir}/ + cd ../boostbook + find dtd -type f -name '*.dtd' | while read tobeinstalledfiles; do + install -p -m 644 $tobeinstalledfiles -D $RPM_BUILD_ROOT%{_datadir}/boostbook/$tobeinstalledfiles + done + find xsl -type f | while read tobeinstalledfiles; do + install -p -m 644 $tobeinstalledfiles -D $RPM_BUILD_ROOT%{_datadir}/boostbook/$tobeinstalledfiles + done +) + +# Install documentation files (HTML pages) within the temporary place +echo ============================= install documentation ================== +# Prepare the place to temporarily store the generated documentation +rm -rf %{boost_docdir} && %{__mkdir_p} %{boost_docdir}/html +DOCPATH=%{boost_docdir} +DOCREGEX='.*\.\(html?\|css\|png\|gif\)' + +find libs doc more -type f -regex $DOCREGEX \ + | sed -n '/\//{s,/[^/]*$,,;p}' \ + | sort -u > tmp-doc-directories + +sed "s:^:$DOCPATH/:" tmp-doc-directories \ + | xargs -P 0 --no-run-if-empty %{__install} -d + +cat tmp-doc-directories | while read tobeinstalleddocdir; do + find $tobeinstalleddocdir -mindepth 1 -maxdepth 1 -regex $DOCREGEX -print0 \ + | xargs -P 0 -0 %{__install} -p -m 644 -t $DOCPATH/$tobeinstalleddocdir +done +rm -f tmp-doc-directories +%{__install} -p -m 644 -t $DOCPATH LICENSE_1_0.txt index.htm index.html boost.png rst.css boost.css + +echo ============================= install examples ================== +# Fix a few non-standard issues (DOS and/or non-UTF8 files) +sed -i -e 's/\r//g' libs/geometry/example/ml02_distance_strategy.cpp +for tmp_doc_file in flyweight/example/Jamfile.v2 \ + format/example/sample_new_features.cpp multi_index/example/Jamfile.v2 \ + multi_index/example/hashed.cpp serialization/example/demo_output.txt +do + mv libs/${tmp_doc_file} libs/${tmp_doc_file}.iso8859 + iconv -f ISO8859-1 -t UTF8 < libs/${tmp_doc_file}.iso8859 > libs/${tmp_doc_file} + touch -r libs/${tmp_doc_file}.iso8859 libs/${tmp_doc_file} + rm -f libs/${tmp_doc_file}.iso8859 +done + +# Prepare the place to temporarily store the examples +rm -rf %{boost_examplesdir} && mkdir -p %{boost_examplesdir}/html +EXAMPLESPATH=%{boost_examplesdir} +find libs -type d -name example -exec find {} -type f \; \ + | sed -n '/\//{s,/[^/]*$,,;p}' \ + | sort -u > tmp-doc-directories +sed "s:^:$EXAMPLESPATH/:" tmp-doc-directories \ + | xargs -P 0 --no-run-if-empty %{__install} -d +rm -f tmp-doc-files-to-be-installed && touch tmp-doc-files-to-be-installed +cat tmp-doc-directories | while read tobeinstalleddocdir +do + find $tobeinstalleddocdir -mindepth 1 -maxdepth 1 -type f \ + >> tmp-doc-files-to-be-installed +done +cat tmp-doc-files-to-be-installed | while read tobeinstalledfiles +do + if test -s $tobeinstalledfiles + then + tobeinstalleddocdir=`dirname $tobeinstalledfiles` + %{__install} -p -m 644 -t $EXAMPLESPATH/$tobeinstalleddocdir $tobeinstalledfiles + fi +done +rm -f tmp-doc-files-to-be-installed +rm -f tmp-doc-directories +%{__install} -p -m 644 -t $EXAMPLESPATH LICENSE_1_0.txt + + +%post doctools +CATALOG=%{_sysconfdir}/xml/catalog +%{_bindir}/xmlcatalog --noout --add "rewriteSystem" \ + "http://www.boost.org/tools/boostbook/dtd" \ + "file://%{_datadir}/boostbook/dtd" $CATALOG +%{_bindir}/xmlcatalog --noout --add "rewriteURI" \ + "http://www.boost.org/tools/boostbook/dtd" \ + "file://%{_datadir}/boostbook/dtd" $CATALOG +%{_bindir}/xmlcatalog --noout --add "rewriteSystem" \ + "http://www.boost.org/tools/boostbook/xsl" \ + "file://%{_datadir}/boostbook/xsl" $CATALOG +%{_bindir}/xmlcatalog --noout --add "rewriteURI" \ + "http://www.boost.org/tools/boostbook/xsl" \ + "file://%{_datadir}/boostbook/xsl" $CATALOG + +%postun doctools +# remove entries only on removal of package +if [ "$1" = 0 ]; then + CATALOG=%{_sysconfdir}/xml/catalog + %{_bindir}/xmlcatalog --noout --del \ + "file://%{_datadir}/boostbook/dtd" $CATALOG + %{_bindir}/xmlcatalog --noout --del \ + "file://%{_datadir}/boostbook/xsl" $CATALOG +fi + + +%files +%license LICENSE_1_0.txt + +%files atomic +%license LICENSE_1_0.txt +%{_libdir}/libboost_atomic.so.%{sonamever} + +%files chrono +%license LICENSE_1_0.txt +%{_libdir}/libboost_chrono.so.%{sonamever} + +%files container +%license LICENSE_1_0.txt +%{_libdir}/libboost_container.so.%{sonamever} + +%if %{with context} + +%files context +%license LICENSE_1_0.txt +%{_libdir}/libboost_context.so.%{sonamever} + +%files coroutine +%license LICENSE_1_0.txt +%{_libdir}/libboost_coroutine.so.%{sonamever} + +%endif + +%files date-time +%license LICENSE_1_0.txt +%{_libdir}/libboost_date_time.so.%{sonamever} + +%if %{with context} +%files fiber +%license LICENSE_1_0.txt +%{_libdir}/libboost_fiber.so.%{sonamever} +%endif + +%files filesystem +%license LICENSE_1_0.txt +%{_libdir}/libboost_filesystem.so.%{sonamever} + +%files graph +%license LICENSE_1_0.txt +%{_libdir}/libboost_graph.so.%{sonamever} + +%files iostreams +%license LICENSE_1_0.txt +%{_libdir}/libboost_iostreams.so.%{sonamever} + +%files json +%license LICENSE_1_0.txt +%{_libdir}/libboost_json.so.%{sonamever} + +%files locale +%license LICENSE_1_0.txt +%{_libdir}/libboost_locale.so.%{sonamever} + +%files log +%license LICENSE_1_0.txt +%{_libdir}/libboost_log.so.%{sonamever} +%{_libdir}/libboost_log_setup.so.%{sonamever} + +%files math +%license LICENSE_1_0.txt +%{_libdir}/libboost_math_c99.so.%{sonamever} +%{_libdir}/libboost_math_c99f.so.%{sonamever} +%{_libdir}/libboost_math_c99l.so.%{sonamever} +%{_libdir}/libboost_math_tr1.so.%{sonamever} +%{_libdir}/libboost_math_tr1f.so.%{sonamever} +%{_libdir}/libboost_math_tr1l.so.%{sonamever} + +%files nowide +%license LICENSE_1_0.txt +%{_libdir}/libboost_nowide.so.%{sonamever} + +%if %{with python3} +%files numpy3 +%license LICENSE_1_0.txt +%{_libdir}/libboost_numpy%{python3_version_nodots}.so.%{sonamever} +%endif + +%files test +%license LICENSE_1_0.txt +%{_libdir}/libboost_prg_exec_monitor.so.%{sonamever} +%{_libdir}/libboost_unit_test_framework.so.%{sonamever} + +%files program-options +%license LICENSE_1_0.txt +%{_libdir}/libboost_program_options.so.%{sonamever} + +%if %{with python3} +%files python3 +%license LICENSE_1_0.txt +%{_libdir}/libboost_python%{python3_version_nodots}.so.%{sonamever} +%endif + +%files random +%license LICENSE_1_0.txt +%{_libdir}/libboost_random.so.%{sonamever} + +%files regex +%license LICENSE_1_0.txt +%{_libdir}/libboost_regex.so.%{sonamever} + +%files serialization +%license LICENSE_1_0.txt +%{_libdir}/libboost_serialization.so.%{sonamever} +%{_libdir}/libboost_wserialization.so.%{sonamever} + +%files stacktrace +%license LICENSE_1_0.txt +%{_libdir}/libboost_stacktrace_addr2line.so.%{sonamever} +%{_libdir}/libboost_stacktrace_basic.so.%{sonamever} +%{_libdir}/libboost_stacktrace_noop.so.%{sonamever} + +%files system +%license LICENSE_1_0.txt +%{_libdir}/libboost_system.so.%{sonamever} + +%files thread +%license LICENSE_1_0.txt +%{_libdir}/libboost_thread.so.%{sonamever} + +%files timer +%license LICENSE_1_0.txt +%{_libdir}/libboost_timer.so.%{sonamever} + +%files type_erasure +%license LICENSE_1_0.txt +%{_libdir}/libboost_type_erasure.so.%{sonamever} + +%files wave +%license LICENSE_1_0.txt +%{_libdir}/libboost_wave.so.%{sonamever} + +%files contract +%license LICENSE_1_0.txt +%{_libdir}/libboost_contract.so.%{sonamever} + +%files doc +%doc %{boost_docdir}/* + +%files examples +%doc %{boost_examplesdir}/* + +%files devel +%license LICENSE_1_0.txt +%{_includedir}/%{name} +%{_libdir}/libboost_atomic.so +%{_libdir}/libboost_chrono.so +%{_libdir}/libboost_container.so +%{_libdir}/libboost_contract.so +%if %{with context} +%{_libdir}/libboost_context.so +%{_libdir}/libboost_coroutine.so +%endif +%{_libdir}/libboost_date_time.so +%if %{with context} +%{_libdir}/libboost_fiber.so +%endif +%{_libdir}/libboost_filesystem.so +%{_libdir}/libboost_graph.so +%{_libdir}/libboost_iostreams.so +%{_libdir}/libboost_json.so +%{_libdir}/libboost_locale.so +%{_libdir}/libboost_log.so +%{_libdir}/libboost_log_setup.so +%{_libdir}/libboost_math_tr1.so +%{_libdir}/libboost_math_tr1f.so +%{_libdir}/libboost_math_tr1l.so +%{_libdir}/libboost_math_c99.so +%{_libdir}/libboost_math_c99f.so +%{_libdir}/libboost_math_c99l.so +%{_libdir}/libboost_nowide.so +%if %{with python3} +%{_libdir}/libboost_numpy%{python3_version_nodots}.so +%endif +%{_libdir}/libboost_prg_exec_monitor.so +%{_libdir}/libboost_unit_test_framework.so +%{_libdir}/libboost_program_options.so +%if %{with python3} +%{_libdir}/libboost_python%{python3_version_nodots}.so +%endif +%{_libdir}/libboost_random.so +%{_libdir}/libboost_regex.so +%{_libdir}/libboost_serialization.so +%{_libdir}/libboost_wserialization.so +%{_libdir}/libboost_stacktrace_addr2line.so +%{_libdir}/libboost_stacktrace_basic.so +%{_libdir}/libboost_stacktrace_noop.so +%{_libdir}/libboost_system.so +%{_libdir}/libboost_thread.so +%{_libdir}/libboost_timer.so +%{_libdir}/libboost_type_erasure.so +%{_libdir}/libboost_wave.so + +%files static +%license LICENSE_1_0.txt +%{_libdir}/*.a +%if %{with mpich} +%{_libdir}/mpich/lib/*.a +%endif +%if %{with openmpi} +%{_libdir}/openmpi/lib/*.a +%endif + +# OpenMPI packages +%if %{with openmpi} + +%files openmpi +%license LICENSE_1_0.txt +%{_libdir}/openmpi/lib/libboost_mpi.so.%{sonamever} + +%files openmpi-devel +%license LICENSE_1_0.txt +%{_libdir}/openmpi/lib/libboost_mpi.so +%{_libdir}/openmpi/lib/libboost_graph_parallel.so + +%if %{with python3} + +%files openmpi-python3 +%license LICENSE_1_0.txt +%{_libdir}/openmpi/lib/libboost_mpi_python%{python3_version_nodots}.so.%{sonamever} +%{python3_sitearch}/openmpi/boost/ + +%files openmpi-python3-devel +%license LICENSE_1_0.txt +%{_libdir}/openmpi/lib/libboost_mpi_python%{python3_version_nodots}.so + +%endif + +%files graph-openmpi +%license LICENSE_1_0.txt +%{_libdir}/openmpi/lib/libboost_graph_parallel.so.%{sonamever} + +%endif + +# MPICH packages +%if %{with mpich} + +%files mpich +%license LICENSE_1_0.txt +%{_libdir}/mpich/lib/libboost_mpi.so.%{sonamever} + +%files mpich-devel +%license LICENSE_1_0.txt +%{_libdir}/mpich/lib/libboost_mpi.so +%{_libdir}/mpich/lib/libboost_graph_parallel.so + +%if %{with python3} + +%files mpich-python3 +%license LICENSE_1_0.txt +%{_libdir}/mpich/lib/libboost_mpi_python%{python3_version_nodots}.so.%{sonamever} +%{python3_sitearch}/mpich/boost/ + +%files mpich-python3-devel +%license LICENSE_1_0.txt +%{_libdir}/mpich/lib/libboost_mpi_python%{python3_version_nodots}.so + +%endif + +%files graph-mpich +%license LICENSE_1_0.txt +%{_libdir}/mpich/lib/libboost_graph_parallel.so.%{sonamever} + +%endif + +%files build +%license LICENSE_1_0.txt +%{_datadir}/%{name}-build/ + +%files doctools +%license LICENSE_1_0.txt +%{_bindir}/quickbook +%{_datadir}/boostbook/ + +%files b2 +%license LICENSE_1_0.txt +%{_bindir}/b2 +%{_mandir}/man1/b2.1* + +%changelog +* Thu Apr 14 2022 Zhongling He 1.78.0-1 +- Init package from upstream v1.78.0 diff --git a/boost_1_78_0.tar.gz b/boost_1_78_0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..190dc53c072f2cac18dee9d1fc1c171a7582668e Binary files /dev/null and b/boost_1_78_0.tar.gz differ diff --git a/libboost_thread.so b/libboost_thread.so new file mode 100644 index 0000000000000000000000000000000000000000..db50610d6f179507ef1f11d355ad4aae5d24d789 --- /dev/null +++ b/libboost_thread.so @@ -0,0 +1,21 @@ +changequote(`[', `]')dnl +/* GNU ld script + + Boost.Thread header files pull in enough of Boost.System that + symbols from the latter library are referenced by a compiled object + that includes Boost.Thread headers. libboost_system-mt.so is among + libboost_thread-mt.so's DT_NEEDED, but program linker requires that + missing symbols are satisfied by direct dependency, not by a + transitive one. Hence this linker script, which brings in the + Boost.System DSO. */ + +INPUT(libboost_thread.so.VERSION) +INPUT(libboost_system.so.VERSION) +ifdef([HAS_ATOMIC_FLAG_LOCKFREE],[], +[ +/* If the given architecture doesn't have lock-free implementation of + boost::atomic_flag, the dependency on Boost.Atomic may leak from + the header files to client binaries. */ + +INPUT(libboost_atomic.so.VERSION) +])dnl