From da0b56fe38f21f3bca1e6cac003b6713ed020a6d Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Wed, 1 Sep 2021 17:51:47 +0100 Subject: [PATCH 1/7] Add patch to fix CI failure --- boost-1.76.0-random-test.patch | 34 ++++++++++++++++++++++++++++++++++ boost.spec | 7 ++++++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 boost-1.76.0-random-test.patch diff --git a/boost-1.76.0-random-test.patch b/boost-1.76.0-random-test.patch new file mode 100644 index 0000000..5ce7477 --- /dev/null +++ b/boost-1.76.0-random-test.patch @@ -0,0 +1,34 @@ +From c3ada7a1b2b54f4b27585f72308a76984f8489b4 Mon Sep 17 00:00:00 2001 +From: jzmaddock +Date: Tue, 16 Mar 2021 10:47:16 +0000 +Subject: [PATCH] Add missing #includes. + +--- + test/multiprecision_float_test.cpp | 1 + + test/multiprecision_int_test.cpp | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/test/multiprecision_float_test.cpp b/test/multiprecision_float_test.cpp +index 904c59d8f..bc2a9364d 100644 +--- boost_1_76_0/libs/random/test/multiprecision_float_test.cpp ++++ boost_1_76_0/libs/random/test/multiprecision_float_test.cpp +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + #include + + +diff --git a/test/multiprecision_int_test.cpp b/test/multiprecision_int_test.cpp +index 577e52aff..41ec229b5 100644 +--- boost_1_76_0/libs/random/test/multiprecision_int_test.cpp ++++ boost_1_76_0/libs/random/test/multiprecision_int_test.cpp +@@ -32,6 +32,7 @@ + #include + #include + #include ++#include + #include + + typedef boost::mpl::list < diff --git a/boost.spec b/boost.spec index 81ee49f..13fff29 100644 --- a/boost.spec +++ b/boost.spec @@ -158,6 +158,9 @@ Patch100: boost-1.76.0-fix-include-inside-boost-namespace.patch # https://github.com/boostorg/math/pull/671 Patch101: boost-1.76.0-fix-duplicate-typedef-in-mp.patch +# https://github.com/boostorg/random/issues/82 +Patch102: boost-1.76.0-random-test.patch + %bcond_with tests %bcond_with docs_generated @@ -681,6 +684,7 @@ find ./boost -name '*.hpp' -perm /111 | xargs chmod a-x %patch98 -p1 %patch100 -p1 %patch101 -p1 +%patch102 -p1 %build %set_build_flags @@ -1292,8 +1296,9 @@ fi %{_mandir}/man1/b2.1* %changelog -* Wed Sep 01 2021 Jonathan Wakely - 1.76.0-5 +* Thu Jul 14 2022 Jonathan Wakely - 1.76.0-5 - Make boost-python3 depend on specific 3.X version (#1896713) +- Add patch to fix CI failure * Thu Aug 05 2021 Thomas Rodgers - 1.76.0-4 - Third attempt at making the long double c99 and tr1 math libs conditional From aa44edbed2593e341f3678004d2aea578f2ff733 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 3 Feb 2022 00:17:30 +0000 Subject: [PATCH 2/7] Add rpmlintrc file to suppress errors in Zuul checks --- boost.rpmlintrc | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 boost.rpmlintrc diff --git a/boost.rpmlintrc b/boost.rpmlintrc new file mode 100644 index 0000000..c8a2596 --- /dev/null +++ b/boost.rpmlintrc @@ -0,0 +1,24 @@ +# The meta-package doesn't contain any files, this is intended. +addFilter("boost.x86_64: E: no-binary") + +# All docs are in a separate boost-doc package +addFilter("boost.*: W: no-documentation") +addFilter("boost.*: W: description-shorter-than-summary") + +# Upstream don't provide one +addFilter("boost-doctools.x86_64: W: no-manual-page-for-binary quickbook") + +# Ignore these +addFilter("boost.*: W: spelling-error %description -l en_US foundational ") +addFilter("boost.*: W: spelling-error %description -l en_US invariants ") +addFilter("boost.*: W: spelling-error %description -l en_US postconditions ") +addFilter("boost.*: W: spelling-error %description -l en_US userland ") +addFilter("boost.*: W: spelling-error Summary(en_US) numpy ") + +# The example code is useless without the headers +addFilter("boost-examples.x86_64: E: devel-dependency boost-devel") + +# These libs are statically linked +addFilter("boost-date-time.x86_64: E: shared-lib-without-dependency-information /usr/lib64/libboost_date_time.so.*") +addFilter("boost-system.x86_64: E: shared-lib-without-dependency-information /usr/lib64/libboost_system.so.*") +addFilter("boost-stacktrace.x86_64: E: shared-lib-without-dependency-information /usr/lib64/libboost_stacktrace_noop.so.*") From 1d280493455f7247c47b82fdc45159c0236d8b42 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 31 Mar 2022 13:12:21 +0100 Subject: [PATCH 3/7] Add patch to fix XML validation errors in ptr_container docs --- boost-1.76.0-ptr_cont-xml.patch | 1263 +++++++++++++++++++++++++++++++ boost.spec | 5 + 2 files changed, 1268 insertions(+) create mode 100644 boost-1.76.0-ptr_cont-xml.patch diff --git a/boost-1.76.0-ptr_cont-xml.patch b/boost-1.76.0-ptr_cont-xml.patch new file mode 100644 index 0000000..ed088bf --- /dev/null +++ b/boost-1.76.0-ptr_cont-xml.patch @@ -0,0 +1,1263 @@ +From adc94a80adbb7b720bd149c8b805876baa77b815 Mon Sep 17 00:00:00 2001 +From: Jonathan Wakely +Date: Wed, 5 Aug 2020 11:28:26 +0100 +Subject: [PATCH] Fix invalid XHTML markup in docs + +The reStructuredText files insert
HTML elements, which are not +valid in XHTML. + +The doc/tutorial_example.html file contains unquoted attributes and +unclosed and tags (although since that file is included +into another document, it probably shouldn't have , and + elements at all). +--- + doc/associative_ptr_container.html | 2 +- + doc/associative_ptr_container.rst | 2 +- + doc/examples.html | 2 +- + doc/examples.rst | 4 +- + doc/faq.html | 2 +- + doc/faq.rst | 2 +- + doc/guidelines.html | 4 +- + doc/guidelines.rst | 4 +- + doc/headers.html | 2 +- + doc/headers.rst | 2 +- + doc/indirect_fun.html | 2 +- + doc/indirect_fun.rst | 2 +- + doc/ptr_array.html | 2 +- + doc/ptr_array.rst | 2 +- + doc/ptr_container.html | 2 +- + doc/ptr_container.rst | 2 +- + doc/ptr_deque.html | 2 +- + doc/ptr_deque.rst | 2 +- + doc/ptr_inserter.html | 2 +- + doc/ptr_inserter.rst | 2 +- + doc/ptr_list.html | 2 +- + doc/ptr_list.rst | 2 +- + doc/ptr_map.html | 2 +- + doc/ptr_map.rst | 2 +- + doc/ptr_map_adapter.html | 2 +- + doc/ptr_map_adapter.rst | 2 +- + doc/ptr_multimap_adapter.html | 2 +- + doc/ptr_multimap_adapter.rst | 2 +- + doc/ptr_multiset.html | 2 +- + doc/ptr_multiset.rst | 2 +- + doc/ptr_multiset_adapter.html | 2 +- + doc/ptr_multiset_adapter.rst | 2 +- + doc/ptr_sequence_adapter.html | 2 +- + doc/ptr_sequence_adapter.rst | 2 +- + doc/ptr_set.html | 2 +- + doc/ptr_set.rst | 2 +- + doc/ptr_set_adapter.html | 2 +- + doc/ptr_set_adapter.rst | 2 +- + doc/ptr_vector.html | 2 +- + doc/ptr_vector.rst | 2 +- + doc/reference.html | 4 +- + doc/reference.rst | 4 +- + doc/reversible_ptr_container.html | 2 +- + doc/reversible_ptr_container.rst | 2 +- + doc/tutorial.html | 4 +- + doc/tutorial.rst | 4 +- + doc/tutorial_example.html | 384 ++++++++++++++--------------- + 47 files changed, 245 insertions(+), 245 deletions(-) + +diff --git a/doc/associative_ptr_container.html b/doc/associative_ptr_container.html +index ccc4d9fa..9467864f 100644 +--- a/libs/ptr_container/doc/associative_ptr_container.html ++++ b/libs/ptr_container/doc/associative_ptr_container.html +@@ -529,7 +529,7 @@

++
+ + + +diff --git a/doc/associative_ptr_container.rst b/doc/associative_ptr_container.rst +index b9b8d45a..6dcd0833 100644 +--- a/libs/ptr_container/doc/associative_ptr_container.rst ++++ b/libs/ptr_container/doc/associative_ptr_container.rst +@@ -216,7 +216,7 @@ Semantics: algorithms + + .. raw:: html + +-
++
+ + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/examples.html b/doc/examples.html +index 5568b323..dbc8ce2b 100644 +--- a/libs/ptr_container/doc/examples.html ++++ b/libs/ptr_container/doc/examples.html +@@ -886,7 +886,7 @@

9. A large example

+
  • home
  • +
  • reference
  • + +-
    ++
    + + + +diff --git a/doc/examples.rst b/doc/examples.rst +index 213094bf..d82f4b85 100644 +--- a/libs/ptr_container/doc/examples.rst ++++ b/libs/ptr_container/doc/examples.rst +@@ -180,7 +180,7 @@ The source code can also be found `here <../test/tut1.cpp>`_. + + .. raw:: html + +-
    ++
    + + **Navigate:** + +@@ -189,7 +189,7 @@ The source code can also be found `here <../test/tut1.cpp>`_. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/faq.html b/doc/faq.html +index f318483b..1d701131 100644 +--- a/libs/ptr_container/doc/faq.html ++++ b/libs/ptr_container/doc/faq.html +@@ -373,7 +373,7 @@

    [13] for details.

    +-

    ++
    + + + +diff --git a/doc/faq.rst b/doc/faq.rst +index 40c8eb2d..e2ead8d7 100644 +--- a/libs/ptr_container/doc/faq.rst ++++ b/libs/ptr_container/doc/faq.rst +@@ -95,7 +95,7 @@ class with dummy implementations of the virtual functions. See `[13] ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/guidelines.html b/doc/guidelines.html +index 759b6259..25d1f148 100644 +--- a/libs/ptr_container/doc/guidelines.html ++++ b/libs/ptr_container/doc/guidelines.html +@@ -414,12 +414,12 @@

    container< nullable<T> >.

    +-

    Navigate:

    ++

    Navigate:

    +
    +-

    ++
    + + + +diff --git a/doc/guidelines.rst b/doc/guidelines.rst +index 1c39c7ba..bf69dac8 100644 +--- a/libs/ptr_container/doc/guidelines.rst ++++ b/libs/ptr_container/doc/guidelines.rst +@@ -144,7 +144,7 @@ you. That is when you truly need ``container< nullable >``. + + .. raw:: html + +-
    ++
    + + **Navigate:** + +@@ -153,7 +153,7 @@ you. That is when you truly need ``container< nullable >``. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/headers.html b/doc/headers.html +index 4b040825..aa1609ab 100644 +--- a/libs/ptr_container/doc/headers.html ++++ b/libs/ptr_container/doc/headers.html +@@ -375,7 +375,7 @@

    Library headers

    +
  • home
  • +
  • reference
  • + +-
    ++
    + + + +diff --git a/doc/headers.rst b/doc/headers.rst +index befcbb55..8c8e8ded 100644 +--- a/libs/ptr_container/doc/headers.rst ++++ b/libs/ptr_container/doc/headers.rst +@@ -75,7 +75,7 @@ Library headers + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/indirect_fun.html b/doc/indirect_fun.html +index a0446472..acc13346 100644 +--- a/libs/ptr_container/doc/indirect_fun.html ++++ b/libs/ptr_container/doc/indirect_fun.html +@@ -401,7 +401,7 @@

    Indirected functions

    + + } // namespace 'boost' + +-
    ++
    + + + +diff --git a/doc/indirect_fun.rst b/doc/indirect_fun.rst +index 5fd13df2..f6583d90 100644 +--- a/libs/ptr_container/doc/indirect_fun.rst ++++ b/libs/ptr_container/doc/indirect_fun.rst +@@ -127,7 +127,7 @@ first operation is expanded inline. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_array.html b/doc/ptr_array.html +index 30da95f7..483fcfa4 100644 +--- a/libs/ptr_container/doc/ptr_array.html ++++ b/libs/ptr_container/doc/ptr_array.html +@@ -660,7 +660,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_array.rst b/doc/ptr_array.rst +index 68c2b47b..a7390236 100644 +--- a/libs/ptr_container/doc/ptr_array.rst ++++ b/libs/ptr_container/doc/ptr_array.rst +@@ -281,7 +281,7 @@ Semantics: pointer container requirements + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_container.html b/doc/ptr_container.html +index 5672bdfd..77a89a35 100644 +--- a/libs/ptr_container/doc/ptr_container.html ++++ b/libs/ptr_container/doc/ptr_container.html +@@ -735,7 +735,7 @@

    References

    + + +
    [13]Kevlin Henney, Null Object, 2002.
    +-
    ++
    + + + +diff --git a/doc/ptr_container.rst b/doc/ptr_container.rst +index 0436cce7..257a2fda 100644 +--- a/libs/ptr_container/doc/ptr_container.rst ++++ b/libs/ptr_container/doc/ptr_container.rst +@@ -384,7 +384,7 @@ __ http://www.two-sdg.demon.co.uk/curbralan/papers/europlop/NullObject.pdf + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. + +diff --git a/doc/ptr_deque.html b/doc/ptr_deque.html +index 5216aa0e..bc996969 100644 +--- a/libs/ptr_container/doc/ptr_deque.html ++++ b/libs/ptr_container/doc/ptr_deque.html +@@ -526,7 +526,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_deque.rst b/doc/ptr_deque.rst +index 020ba362..a2a2cc99 100644 +--- a/libs/ptr_container/doc/ptr_deque.rst ++++ b/libs/ptr_container/doc/ptr_deque.rst +@@ -170,7 +170,7 @@ Semantics: pointer container requirements + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_inserter.html b/doc/ptr_inserter.html +index 9fb05a8a..92e4a527 100644 +--- a/libs/ptr_container/doc/ptr_inserter.html ++++ b/libs/ptr_container/doc/ptr_inserter.html +@@ -348,7 +348,7 @@

    Insert Iterators

    + } // namespace 'ptr_container' + } // namespace 'boost' + +-
    ++
    + + + +diff --git a/doc/ptr_inserter.rst b/doc/ptr_inserter.rst +index 574bbdad..ef1c820b 100644 +--- a/libs/ptr_container/doc/ptr_inserter.rst ++++ b/libs/ptr_container/doc/ptr_inserter.rst +@@ -70,7 +70,7 @@ can be transfered as well. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2008. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_list.html b/doc/ptr_list.html +index 1a8e6798..c76aeaf9 100644 +--- a/libs/ptr_container/doc/ptr_list.html ++++ b/libs/ptr_container/doc/ptr_list.html +@@ -500,7 +500,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_list.rst b/doc/ptr_list.rst +index 302049d0..2eceb9d7 100644 +--- a/libs/ptr_container/doc/ptr_list.rst ++++ b/libs/ptr_container/doc/ptr_list.rst +@@ -146,7 +146,7 @@ Semantics: list operations + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_map.html b/doc/ptr_map.html +index e5fd2c9c..bc75e5cb 100644 +--- a/libs/ptr_container/doc/ptr_map.html ++++ b/libs/ptr_container/doc/ptr_map.html +@@ -342,7 +342,7 @@

    Class +-

    ++
    + + + +diff --git a/doc/ptr_map.rst b/doc/ptr_map.rst +index 6b50a2ba..64113937 100644 +--- a/libs/ptr_container/doc/ptr_map.rst ++++ b/libs/ptr_container/doc/ptr_map.rst +@@ -63,7 +63,7 @@ to store the pointers. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_map_adapter.html b/doc/ptr_map_adapter.html +index 2ed30539..b451914c 100644 +--- a/libs/ptr_container/doc/ptr_map_adapter.html ++++ b/libs/ptr_container/doc/ptr_map_adapter.html +@@ -556,7 +556,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_map_adapter.rst b/doc/ptr_map_adapter.rst +index 517ea7fc..aabf5c4e 100644 +--- a/libs/ptr_container/doc/ptr_map_adapter.rst ++++ b/libs/ptr_container/doc/ptr_map_adapter.rst +@@ -194,7 +194,7 @@ Semantics: pointer container requirements + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_multimap_adapter.html b/doc/ptr_multimap_adapter.html +index 3780ec8c..49243a16 100644 +--- a/libs/ptr_container/doc/ptr_multimap_adapter.html ++++ b/libs/ptr_container/doc/ptr_multimap_adapter.html +@@ -540,7 +540,7 @@

    Semantics: typedefs

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_multimap_adapter.rst b/doc/ptr_multimap_adapter.rst +index 3b9e9961..56d37f5d 100644 +--- a/libs/ptr_container/doc/ptr_multimap_adapter.rst ++++ b/libs/ptr_container/doc/ptr_multimap_adapter.rst +@@ -189,7 +189,7 @@ Semantics: pointer container requirements + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_multiset.html b/doc/ptr_multiset.html +index a82a7995..50fa9681 100644 +--- a/libs/ptr_container/doc/ptr_multiset.html ++++ b/libs/ptr_container/doc/ptr_multiset.html +@@ -349,7 +349,7 @@

    Class +
      +
    • Using nullable<T> as Key is meaningless and is not allowed
    • +
    +-

    ++
    + + + +diff --git a/doc/ptr_multiset.rst b/doc/ptr_multiset.rst +index 120891bd..3af8bef3 100644 +--- a/libs/ptr_container/doc/ptr_multiset.rst ++++ b/libs/ptr_container/doc/ptr_multiset.rst +@@ -70,7 +70,7 @@ to store the pointers. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_multiset_adapter.html b/doc/ptr_multiset_adapter.html +index 6bcfebb1..96e811d1 100644 +--- a/libs/ptr_container/doc/ptr_multiset_adapter.html ++++ b/libs/ptr_container/doc/ptr_multiset_adapter.html +@@ -491,7 +491,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_multiset_adapter.rst b/doc/ptr_multiset_adapter.rst +index eb9eafe2..8c437fb1 100644 +--- a/libs/ptr_container/doc/ptr_multiset_adapter.rst ++++ b/libs/ptr_container/doc/ptr_multiset_adapter.rst +@@ -134,7 +134,7 @@ Semantics: pointer container requirements + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_sequence_adapter.html b/doc/ptr_sequence_adapter.html +index aa2e7a42..9c4af800 100644 +--- a/libs/ptr_container/doc/ptr_sequence_adapter.html ++++ b/libs/ptr_container/doc/ptr_sequence_adapter.html +@@ -827,7 +827,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_sequence_adapter.rst b/doc/ptr_sequence_adapter.rst +index 5640d029..d98684c1 100644 +--- a/libs/ptr_container/doc/ptr_sequence_adapter.rst ++++ b/libs/ptr_container/doc/ptr_sequence_adapter.rst +@@ -443,7 +443,7 @@ contain any nulls*. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_set.html b/doc/ptr_set.html +index 8e66779f..1a5a37b0 100644 +--- a/libs/ptr_container/doc/ptr_set.html ++++ b/libs/ptr_container/doc/ptr_set.html +@@ -350,7 +350,7 @@

    Class +
  • Using nullable<T> as Key is meaningless and is not allowed
  • + +-

    ++
    + + + +diff --git a/doc/ptr_set.rst b/doc/ptr_set.rst +index 6679a8b2..5fb83d1e 100644 +--- a/libs/ptr_container/doc/ptr_set.rst ++++ b/libs/ptr_container/doc/ptr_set.rst +@@ -72,7 +72,7 @@ to store the pointers. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_set_adapter.html b/doc/ptr_set_adapter.html +index 12820d38..e32501da 100644 +--- a/libs/ptr_container/doc/ptr_set_adapter.html ++++ b/libs/ptr_container/doc/ptr_set_adapter.html +@@ -491,7 +491,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_set_adapter.rst b/doc/ptr_set_adapter.rst +index bb19e148..7b89c184 100644 +--- a/libs/ptr_container/doc/ptr_set_adapter.rst ++++ b/libs/ptr_container/doc/ptr_set_adapter.rst +@@ -136,7 +136,7 @@ Semantics: pointer container requirements + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/ptr_vector.html b/doc/ptr_vector.html +index def2a569..150c9a71 100644 +--- a/libs/ptr_container/doc/ptr_vector.html ++++ b/libs/ptr_container/doc/ptr_vector.html +@@ -550,7 +550,7 @@

    Semantics

    + + + +-
    ++
    + + + +diff --git a/doc/ptr_vector.rst b/doc/ptr_vector.rst +index 374166f2..575a5679 100644 +--- a/libs/ptr_container/doc/ptr_vector.rst ++++ b/libs/ptr_container/doc/ptr_vector.rst +@@ -185,7 +185,7 @@ Semantics: C-array support + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2007. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/reference.html b/doc/reference.html +index 1ae18479..653b4324 100644 +--- a/libs/ptr_container/doc/reference.html ++++ b/libs/ptr_container/doc/reference.html +@@ -797,11 +797,11 @@

    BOOST_NO_EXCEPTIONS is defined, then BOOST_PTR_CONTAINER_NO_EXCEPTIONS + is also defined.

    +-

    Navigate:

    ++

    Navigate:

    +
    +-

    ++
    + + + +diff --git a/doc/reference.rst b/doc/reference.rst +index 3dffbc68..0b827e0e 100644 +--- a/libs/ptr_container/doc/reference.rst ++++ b/libs/ptr_container/doc/reference.rst +@@ -486,7 +486,7 @@ is also defined. + + .. raw:: html + +-
    ++
    + + **Navigate:** + +@@ -494,7 +494,7 @@ is also defined. + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2007. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/reversible_ptr_container.html b/doc/reversible_ptr_container.html +index ede30c57..e45fcde8 100644 +--- a/libs/ptr_container/doc/reversible_ptr_container.html ++++ b/libs/ptr_container/doc/reversible_ptr_container.html +@@ -885,7 +885,7 @@

    Semantics

    + Boost.Serialization +
  • Exception safety: Loading gives the basic guarantee
  • + +-
    ++
    + + + +diff --git a/doc/reversible_ptr_container.rst b/doc/reversible_ptr_container.rst +index 360f7d97..4fb24163 100644 +--- a/libs/ptr_container/doc/reversible_ptr_container.rst ++++ b/libs/ptr_container/doc/reversible_ptr_container.rst +@@ -506,7 +506,7 @@ All containers can be serialized by means of + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2007. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/tutorial.html b/doc/tutorial.html +index 7c93b469..05047afd 100644 +--- a/libs/ptr_container/doc/tutorial.html ++++ b/libs/ptr_container/doc/tutorial.html +@@ -773,7 +773,7 @@

    Algorithms

    + BOOST_ASSERT( another_zoo.empty() ); + +

    That is all; now you have learned all the basics!

    +-

    See also

    ++

    See also

    + +-
    ++
    + + + +diff --git a/doc/tutorial.rst b/doc/tutorial.rst +index a7c12e20..8b84364a 100644 +--- a/libs/ptr_container/doc/tutorial.rst ++++ b/libs/ptr_container/doc/tutorial.rst +@@ -440,7 +440,7 @@ That is all; now you have learned all the basics! + + .. raw:: html + +-
    ++
    + + **See also** + +@@ -455,7 +455,7 @@ That is all; now you have learned all the basics! + + .. raw:: html + +-
    ++
    + + :Copyright: Thorsten Ottosen 2004-2006. Use, modification and distribution is subject to the Boost Software License, Version 1.0 (see LICENSE_1_0.txt__). + +diff --git a/doc/tutorial_example.html b/doc/tutorial_example.html +index 202a17bb..9ebf4a1c 100644 +--- a/libs/ptr_container/doc/tutorial_example.html ++++ b/libs/ptr_container/doc/tutorial_example.html +@@ -1,12 +1,12 @@ + + +- ++ + +- ++ + + + +-
    //
    ++    
    //
    + // Boost.Pointer Container
    + //
    + //  Copyright Thorsten Ottosen 2003-2005. Use, modification and
    +@@ -30,149 +30,149 @@
    + //
    + // First we select which container to use.
    + //
    +-#include <boost/ptr_container/ptr_deque.hpp>
    ++#include <boost/ptr_container/ptr_deque.hpp>
    + 
    +-//
    ++//
    + // we need these later in the example
    + //
    +-#include <boost/assert.hpp>
    +-#include <string>
    +-#include <exception>
    ++#include <boost/assert.hpp>
    ++#include <string>
    ++#include <exception>
    + 
    + 
    +-//
    ++//
    + // Then we define a small polymorphic class
    + // hierarchy.
    + // 
    + 
    +-class animal : boost::noncopyable
    +-{
    +-    virtual std::string do_speak() const = 0;
    +-    std::string name_;
    ++class animal : boost::noncopyable
    ++{
    ++    virtual std::string do_speak() const = 0;
    ++    std::string name_;
    + 
    +-protected:
    +-    //
    ++protected:
    ++    //
    +     // Animals cannot be copied...
    +     //
    +-    animal( const animal& r ) : name_( r.name_ )           { }
    +-    void operator=( const animal& );
    ++    animal( const animal& r ) : name_( r.name_ )           { }
    ++    void operator=( const animal& );
    + 
    +-private:
    +-    //
    ++private:
    ++    //
    +     // ...but due to advances in genetics, we can clone them!
    +     //
    + 
    +-    virtual animal* do_clone() const = 0;
    ++    virtual animal* do_clone() const = 0;
    +         
    +-public:
    +-    animal( const std::string& name ) : name_(name)        { }
    +-    virtual ~animal() throw()                              { }
    ++public:
    ++    animal( const std::string& name ) : name_(name)        { }
    ++    virtual ~animal() throw()                              { }
    +     
    +-    std::string speak() const
    +-    {
    +-        return do_speak();
    +-    }
    +-
    +-    std::string name() const
    +-    {
    +-        return name_;
    +-    }
    +-
    +-    animal* clone() const
    +-    {
    +-        return do_clone();
    +-    }
    +-};
    +-
    +-//
    ++    std::string speak() const
    ++    {
    ++        return do_speak();
    ++    }
    ++
    ++    std::string name() const
    ++    {
    ++        return name_;
    ++    }
    ++
    ++    animal* clone() const
    ++    {
    ++        return do_clone();
    ++    }
    ++};
    ++
    ++//
    + // An animal is still not Clonable. We need this last hook.
    + //
    + // Notice that we pass the animal by const reference
    + // and return by pointer.
    + //
    + 
    +-animal* new_clone( const animal& a )
    +-{
    +-    return a.clone();
    +-}
    ++animal* new_clone( const animal& a )
    ++{
    ++    return a.clone();
    ++}
    + 
    +-//
    ++//
    + // We do not need to define 'delete_clone()' since
    + // since the default is to call the default 'operator delete()'.
    + //
    + 
    +-const std::string muuuh = "Muuuh!";
    +-const std::string oiink = "Oiiink";
    +-
    +-class cow : public animal
    +-{
    +-    virtual std::string do_speak() const
    +-    {
    +-        return muuuh;
    +-    }
    +-
    +-    virtual animal* do_clone() const
    +-    {
    +-        return new cow( *this );
    +-    }
    +-
    +-public:
    +-    cow( const std::string& name ) : animal(name)          { }
    +-};
    +-
    +-class pig : public animal
    +-{
    +-    virtual std::string do_speak() const
    +-    {
    +-        return oiink;
    +-    }
    +-
    +-    virtual animal* do_clone() const
    +-    {
    +-        return new pig( *this );
    +-    }
    ++const std::string muuuh = "Muuuh!";
    ++const std::string oiink = "Oiiink";
    ++
    ++class cow : public animal
    ++{
    ++    virtual std::string do_speak() const
    ++    {
    ++        return muuuh;
    ++    }
    ++
    ++    virtual animal* do_clone() const
    ++    {
    ++        return new cow( *this );
    ++    }
    ++
    ++public:
    ++    cow( const std::string& name ) : animal(name)          { }
    ++};
    ++
    ++class pig : public animal
    ++{
    ++    virtual std::string do_speak() const
    ++    {
    ++        return oiink;
    ++    }
    ++
    ++    virtual animal* do_clone() const
    ++    {
    ++        return new pig( *this );
    ++    }
    +     
    +-public:
    +-    pig( const std::string& name ) : animal(name)          { }
    +-};
    ++public:
    ++    pig( const std::string& name ) : animal(name)          { }
    ++};
    + 
    +-//
    ++//
    + // Then we, of course, need a place to put all
    + // those animals.
    + //
    + 
    +-class farm
    +-{
    +-    //
    ++class farm
    ++{
    ++    //
    +     // This is where the smart containers are handy
    +     //
    +-    typedef boost::ptr_deque<animal> barn_type;
    +-    barn_type                        barn;
    ++    typedef boost::ptr_deque<animal> barn_type;
    ++    barn_type                        barn;
    + 
    +-    //
    ++    //
    +     // A convenience typedef for the compiler-appropriate
    +     // smart pointer used to manage barns
    +     //    
    +-    typedef compatible-smart-ptr<barn_type> raii_ptr;
    ++    typedef compatible-smart-ptr<barn_type> raii_ptr;
    + 
    +-    //
    ++    //
    +     // An error type
    +     //
    +-    struct farm_trouble : public std::exception           { };
    ++    struct farm_trouble : public std::exception           { };
    + 
    +-public:
    +-    // 
    ++public:
    ++    // 
    +     // We would like to make it possible to
    +     // iterate over the animals in the farm
    +     //
    +-    typedef barn_type::iterator  animal_iterator;
    ++    typedef barn_type::iterator  animal_iterator;
    + 
    +-    //
    ++    //
    +     // We also need to count the farm's size...
    +     //
    +-    typedef barn_type::size_type size_type;
    ++    typedef barn_type::size_type size_type;
    +     
    +-    //
    ++    //
    +     // And we also want to transfer an animal
    +     // safely around. The easiest way to think
    +     // about '::auto_type' is to imagine a simplified
    +@@ -184,100 +184,100 @@
    +     //
    +     // but not more.
    +     //
    +-    typedef barn_type::auto_type  animal_transport;
    ++    typedef barn_type::auto_type  animal_transport;
    + 
    +-    // 
    ++    // 
    +     // Create an empty farm.
    +     //
    +-    farm()                                                 { }
    ++    farm()                                                 { }
    +     
    +-    //
    ++    //
    +     // We need a constructor that can make a new
    +     // farm by cloning a range of animals.
    +     //
    +-    farm( animal_iterator begin, animal_iterator end )
    +-     : 
    +-        //
    ++    farm( animal_iterator begin, animal_iterator end )
    ++     : 
    ++        //
    +         // Objects are always cloned before insertion
    +         // unless we explicitly add a pointer or 
    +         // use 'release()'. Therefore we actually
    +         // clone all animals in the range
    +         //
    +-        barn( begin, end )                               { }
    ++        barn( begin, end )                               { }
    +     
    +-    //
    ++    //
    +     // ... so we need some other function too
    +     //
    + 
    +-    animal_iterator begin()
    +-    {
    +-        return barn.begin();
    +-    }
    ++    animal_iterator begin()
    ++    {
    ++        return barn.begin();
    ++    }
    + 
    +-    animal_iterator end()
    +-    {
    +-        return barn.end();
    +-    }
    ++    animal_iterator end()
    ++    {
    ++        return barn.end();
    ++    }
    +     
    +-    //
    ++    //
    +     // Here it is quite ok to have an 'animal*' argument.
    +     // The smart container will handle all ownership
    +     // issues.
    +     //
    +-    void buy_animal( animal* a )
    +-    {
    +-        barn.push_back( a );
    +-    }
    ++    void buy_animal( animal* a )
    ++    {
    ++        barn.push_back( a );
    ++    }
    + 
    +-    //
    ++    //
    +     // The farm can also be in economical trouble and
    +     // therefore be in the need to sell animals.
    +     //
    +-    animal_transport sell_animal( animal_iterator to_sell )
    +-    {
    +-        if( to_sell == end() )
    +-            throw farm_trouble();
    ++    animal_transport sell_animal( animal_iterator to_sell )
    ++    {
    ++        if( to_sell == end() )
    ++            throw farm_trouble();
    + 
    +-        //
    ++        //
    +         // Here we remove the animal from the barn,
    +         // but the animal is not deleted yet...it's
    +         // up to the buyer to decide what
    +         // to do with it.
    +         //
    +-        return barn.release( to_sell );
    +-    }
    ++        return barn.release( to_sell );
    ++    }
    + 
    +-    //
    ++    //
    +     // How big a farm do we have?
    +     //
    +-    size_type size() const
    +-    {
    +-        return barn.size();
    +-    }
    ++    size_type size() const
    ++    {
    ++        return barn.size();
    ++    }
    + 
    +-    //
    ++    //
    +     // If things are bad, we might choose to sell all animals :-(
    +       //
    + 
    +-    raii_ptr sell_farm()
    +-    {
    +-        return barn.release();
    +-    }
    ++    raii_ptr sell_farm()
    ++    {
    ++        return barn.release();
    ++    }
    + 
    +-    //
    ++    //
    +     // However, if things are good, we might buy somebody
    +     // else's farm :-)
    +     //
    + 
    +-    void buy_farm( raii_ptr other )
    +-    {
    +-        //
    ++    void buy_farm( raii_ptr other )
    ++    {
    ++        //
    +         // This line inserts all the animals from 'other'
    +         // and is guaranteed either to succeed or to have no
    +         // effect
    +         //
    +-        barn.transfer( barn.end(), // insert new animals at the end
    +-                         *other );     // we want to transfer all animals,
    ++        barn.transfer( barn.end(), // insert new animals at the end
    ++                         *other );     // we want to transfer all animals,
    +                                        // so we use the whole container as argument
    +         //
    +         // You might think you would have to do
    +@@ -286,86 +286,86 @@
    +         //
    +         // but '*other' is empty and can go out of scope as it wants
    +         //
    +-        BOOST_ASSERT( other->empty() );
    +-    }
    ++        BOOST_ASSERT( other->empty() );
    ++    }
    +     
    +-}; // class 'farm'.
    ++}; // class 'farm'.
    + 
    +-int main()
    +-{
    +-    //
    ++int main()
    ++{
    ++    //
    +     // First we make a farm
    +     //
    +-    farm animal_farm;
    +-    BOOST_ASSERT( animal_farm.size() == 0u );
    ++    farm animal_farm;
    ++    BOOST_ASSERT( animal_farm.size() == 0u );
    +     
    +-    animal_farm.buy_animal( new pig("Betty") );
    +-    animal_farm.buy_animal( new pig("Benny") );
    +-    animal_farm.buy_animal( new pig("Jeltzin") );
    +-    animal_farm.buy_animal( new cow("Hanz") );
    +-    animal_farm.buy_animal( new cow("Mary") );
    +-    animal_farm.buy_animal( new cow("Frederik") );
    +-    BOOST_ASSERT( animal_farm.size() == 6u );
    +-
    +-    //
    ++    animal_farm.buy_animal( new pig("Betty") );
    ++    animal_farm.buy_animal( new pig("Benny") );
    ++    animal_farm.buy_animal( new pig("Jeltzin") );
    ++    animal_farm.buy_animal( new cow("Hanz") );
    ++    animal_farm.buy_animal( new cow("Mary") );
    ++    animal_farm.buy_animal( new cow("Frederik") );
    ++    BOOST_ASSERT( animal_farm.size() == 6u );
    ++
    ++    //
    +     // Then we make another farm...it will actually contain
    +     // a clone of the other farm.
    +     //
    +-    farm new_farm( animal_farm.begin(), animal_farm.end() );
    +-    BOOST_ASSERT( new_farm.size() == 6u );
    ++    farm new_farm( animal_farm.begin(), animal_farm.end() );
    ++    BOOST_ASSERT( new_farm.size() == 6u );
    + 
    +-    //
    ++    //
    +     // Is it really clones in the new farm?
    +     //
    +-    BOOST_ASSERT( new_farm.begin()->name() == "Betty" );
    ++    BOOST_ASSERT( new_farm.begin()->name() == "Betty" );
    +     
    +-    //
    ++    //
    +     // Then we search for an animal, Mary (the Crown Princess of Denmark),
    +     // because we would like to buy her ...
    +     //
    +-    typedef farm::animal_iterator iterator;
    +-    iterator to_sell;
    +-    for( iterator i   = animal_farm.begin(),
    +-                  end = animal_farm.end();
    +-         i != end; ++i )
    +-    {
    +-        if( i->name() == "Mary" )
    +-        {
    +-            to_sell = i;
    +-            break;
    +-        }
    +-    }
    +-
    +-    farm::animal_transport mary = animal_farm.sell_animal( to_sell );
    +-
    +-
    +-    if( mary->speak() == muuuh )
    +-        //
    ++    typedef farm::animal_iterator iterator;
    ++    iterator to_sell;
    ++    for( iterator i   = animal_farm.begin(),
    ++                  end = animal_farm.end();
    ++         i != end; ++i )
    ++    {
    ++        if( i->name() == "Mary" )
    ++        {
    ++            to_sell = i;
    ++            break;
    ++        }
    ++    }
    ++
    ++    farm::animal_transport mary = animal_farm.sell_animal( to_sell );
    ++
    ++
    ++    if( mary->speak() == muuuh )
    ++        //
    +         // Great, Mary is a cow, and she may live longer
    +         //
    +-        new_farm.buy_animal( mary.release() );
    +-    else
    +-        //
    ++        new_farm.buy_animal( mary.release() );
    ++    else
    ++        //
    +         // Then the animal would be destroyed (!)
    +         // when we go out of scope.
    +         //
    +-        ;
    ++        ;
    + 
    +-    //
    ++    //
    +     // Now we can observe some changes to the two farms...
    +     //
    +-    BOOST_ASSERT( animal_farm.size() == 5u );
    +-    BOOST_ASSERT( new_farm.size()    == 7u );
    ++    BOOST_ASSERT( animal_farm.size() == 5u );
    ++    BOOST_ASSERT( new_farm.size()    == 7u );
    + 
    +-    //
    ++    //
    +     // The new farm has however underestimated how much
    +     // it cost to feed Mary and its owner is forced to sell the farm...
    +     //
    +-    animal_farm.buy_farm( new_farm.sell_farm() );
    ++    animal_farm.buy_farm( new_farm.sell_farm() );
    + 
    +-    BOOST_ASSERT( new_farm.size()    == 0u );
    +-    BOOST_ASSERT( animal_farm.size() == 12u );     
    +-}
    ++    BOOST_ASSERT( new_farm.size()    == 0u );
    ++    BOOST_ASSERT( animal_farm.size() == 12u );     
    ++}
    + 
    + + diff --git a/boost.spec b/boost.spec index 13fff29..aaac5d0 100644 --- a/boost.spec +++ b/boost.spec @@ -161,6 +161,9 @@ Patch101: boost-1.76.0-fix-duplicate-typedef-in-mp.patch # https://github.com/boostorg/random/issues/82 Patch102: boost-1.76.0-random-test.patch +# https://github.com/boostorg/ptr_container/pull/27 +Patch105: boost-1.76.0-ptr_cont-xml.patch + %bcond_with tests %bcond_with docs_generated @@ -685,6 +688,7 @@ find ./boost -name '*.hpp' -perm /111 | xargs chmod a-x %patch100 -p1 %patch101 -p1 %patch102 -p1 +%patch105 -p1 %build %set_build_flags @@ -1299,6 +1303,7 @@ fi * Thu Jul 14 2022 Jonathan Wakely - 1.76.0-5 - Make boost-python3 depend on specific 3.X version (#1896713) - Add patch to fix CI failure +- Add patch to fix XML validation errors in ptr_container docs * Thu Aug 05 2021 Thomas Rodgers - 1.76.0-4 - Third attempt at making the long double c99 and tr1 math libs conditional From 31d7f00edc07319fd24563de3aa82f462b92d50e Mon Sep 17 00:00:00 2001 From: Thomas W Rodgers Date: Tue, 26 Apr 2022 20:53:21 -0700 Subject: [PATCH 4/7] Add BuildRequires: libzstd-devel (#2042336) --- boost.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boost.spec b/boost.spec index aaac5d0..4474122 100644 --- a/boost.spec +++ b/boost.spec @@ -123,6 +123,7 @@ BuildRequires: libicu-devel BuildRequires: libquadmath-devel %endif BuildRequires: bison +BuildRequires: libzstd-devel # https://bugzilla.redhat.com/show_bug.cgi?id=828856 # https://bugzilla.redhat.com/show_bug.cgi?id=828857 @@ -1304,6 +1305,7 @@ fi - Make boost-python3 depend on specific 3.X version (#1896713) - Add patch to fix CI failure - Add patch to fix XML validation errors in ptr_container docs +- Add BuildRequires: libzstd-devel (#2042336) * Thu Aug 05 2021 Thomas Rodgers - 1.76.0-4 - Third attempt at making the long double c99 and tr1 math libs conditional From 2844380e8705ef9f76b10a7b6cc6e284d53f2271 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 14 Jul 2022 11:50:14 +0100 Subject: [PATCH 5/7] Add patch to fix Asio includes Resolves: #2106441 --- boost-1.76.0-asio-header.patch | 34 ++++++++++++++++++++++++++++++++++ boost.spec | 5 +++++ 2 files changed, 39 insertions(+) create mode 100644 boost-1.76.0-asio-header.patch diff --git a/boost-1.76.0-asio-header.patch b/boost-1.76.0-asio-header.patch new file mode 100644 index 0000000..95ce2bc --- /dev/null +++ b/boost-1.76.0-asio-header.patch @@ -0,0 +1,34 @@ +From 71964b22c7fade69cc4caa1c869a868e3a32cc97 Mon Sep 17 00:00:00 2001 +From: Christopher Kohlhoff +Date: Wed, 2 Mar 2022 21:41:04 +1100 +Subject: [PATCH] Header is needed for std::exchange. + +--- + include/boost/asio/awaitable.hpp | 1 + + include/boost/asio/impl/awaitable.hpp | 1 - + 2 files changed, 1 insertion(+), 1 deletion(-) + +diff --git a/include/boost/asio/awaitable.hpp b/include/boost/asio/awaitable.hpp +index a9cc90d43..750198995 100644 +--- a/include/boost/asio/awaitable.hpp ++++ b/include/boost/asio/awaitable.hpp +@@ -25,6 +25,7 @@ + # include + #endif // defined(BOOST_ASIO_HAS_STD_COROUTINE) + ++#include + #include + + #include +diff --git a/include/boost/asio/impl/awaitable.hpp b/include/boost/asio/impl/awaitable.hpp +index 49a47e29a..c66fa74c6 100644 +--- a/include/boost/asio/impl/awaitable.hpp ++++ b/include/boost/asio/impl/awaitable.hpp +@@ -19,7 +19,6 @@ + #include + #include + #include +-#include + #include + #include + #include diff --git a/boost.spec b/boost.spec index 4474122..3e0edde 100644 --- a/boost.spec +++ b/boost.spec @@ -165,6 +165,9 @@ Patch102: boost-1.76.0-random-test.patch # https://github.com/boostorg/ptr_container/pull/27 Patch105: boost-1.76.0-ptr_cont-xml.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=2106441 +Patch106: boost-1.76.0-asio-header.patch + %bcond_with tests %bcond_with docs_generated @@ -690,6 +693,7 @@ find ./boost -name '*.hpp' -perm /111 | xargs chmod a-x %patch101 -p1 %patch102 -p1 %patch105 -p1 +%patch106 -p2 %build %set_build_flags @@ -1306,6 +1310,7 @@ fi - Add patch to fix CI failure - Add patch to fix XML validation errors in ptr_container docs - Add BuildRequires: libzstd-devel (#2042336) +- Add patch to fix Asio includes (#2106441) * Thu Aug 05 2021 Thomas Rodgers - 1.76.0-4 - Third attempt at making the long double c99 and tr1 math libs conditional From 5117e662ba6a7a728d84dd04ca8a83a7dee3fed2 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 14 Jul 2022 12:52:42 +0100 Subject: [PATCH 6/7] Add patch to fix filesystem::copy_file EXDEV handling Resolves: #2106878 --- boost-1.76.0-filesystem-copy_file-exdev.patch | 152 ++++++++++++++++++ boost.spec | 6 + 2 files changed, 158 insertions(+) create mode 100644 boost-1.76.0-filesystem-copy_file-exdev.patch diff --git a/boost-1.76.0-filesystem-copy_file-exdev.patch b/boost-1.76.0-filesystem-copy_file-exdev.patch new file mode 100644 index 0000000..9d1b630 --- /dev/null +++ b/boost-1.76.0-filesystem-copy_file-exdev.patch @@ -0,0 +1,152 @@ +From 4b9052f1e0b2acf625e8247582f44acdcc78a4ce Mon Sep 17 00:00:00 2001 +From: Andrey Semashev +Date: Tue, 18 May 2021 22:53:40 +0300 +Subject: [PATCH] Fallback to read/write loop if sendfile/copy_file_range fail. + +Since sendfile and copy_file_range can fail for some filesystems +(e.g. eCryptFS), we have to fallback to the read/write loop in copy_file +implementation. Additionally, since we implement the fallback now, +fallback to sendfile if copy_file_range fails with EXDEV and use +copy_file_range on older kernels that don't implement it for +cross-filesystem copying. This may be beneficial if copy_file_range +is used within a filesystem, and is performed on a remote server NFS or CIFS). + +Also, it was discovered that copy_file_range can also fail with EOPNOTSUPP +when it is performed on an NFSv4 filesystem and the remote server does +not support COPY operation. This happens on some patched kernels in RHEL/CentOS. + +Lastly, to make sure the copy_file_data pointer is accessed atomically, +it is now declared as an atomic value. If std::atomic is unavailable, +Boost.Atomic is used. + +Fixes https://github.com/boostorg/filesystem/issues/184. +--- + +diff --git a/src/operations.cpp b/src/operations.cpp +index abc7e4f6e..8f1130f00 100644 +--- a/libs/filesystem/src/operations.cpp ++++ b/libs/filesystem/src/operations.cpp +@@ -135,6 +135,8 @@ using std::time_t; + # endif // BOOST_WINDOWS_API + + #include "error_handling.hpp" ++#include ++namespace atomic_ns = std; + + namespace fs = boost::filesystem; + using boost::filesystem::path; +@@ -521,6 +522,9 @@ int copy_file_data_read_write(int infile, int outfile, uintmax_t size) + if (BOOST_UNLIKELY(!buf.get())) + return ENOMEM; + ++ // Don't use file size to limit the amount of data to copy since some filesystems, like procfs or sysfs, ++ // provide files with generated content and indicate that their size is zero or 4096. Just copy as much data ++ // as we can read from the input file. + while (true) + { + ssize_t sz_read = ::read(infile, buf.get(), buf_sz); +@@ -555,7 +559,7 @@ int copy_file_data_read_write(int infile, int outfile, uintmax_t size) + } + + //! Pointer to the actual implementation of the copy_file_data implementation +-copy_file_data_t* copy_file_data = ©_file_data_read_write; ++atomic_ns::atomic< copy_file_data_t* > copy_file_data(©_file_data_read_write); + + #if defined(BOOST_FILESYSTEM_USE_SENDFILE) + +@@ -577,6 +581,23 @@ int copy_file_data_sendfile(int infile, int outfile, uintmax_t size) + int err = errno; + if (err == EINTR) + continue; ++ ++ if (offset == 0u) ++ { ++ // sendfile may fail with EINVAL if the underlying filesystem does not support it ++ if (err == EINVAL) ++ { ++ fallback_to_read_write: ++ return copy_file_data_read_write(infile, outfile, size); ++ } ++ ++ if (err == ENOSYS) ++ { ++ copy_file_data.store(©_file_data_read_write, atomic_ns::memory_order_relaxed); ++ goto fallback_to_read_write; ++ } ++ } ++ + return err; + } + +@@ -611,6 +632,44 @@ int copy_file_data_copy_file_range(int infile, int outfile, uintmax_t size) + int err = errno; + if (err == EINTR) + continue; ++ ++ if (offset == 0u) ++ { ++ // copy_file_range may fail with EINVAL if the underlying filesystem does not support it. ++ // In some RHEL/CentOS 7.7-7.8 kernel versions, copy_file_range on NFSv4 is also known to return EOPNOTSUPP ++ // if the remote server does not support COPY, despite that it is not a documented error code. ++ // See https://patchwork.kernel.org/project/linux-nfs/patch/20190411183418.4510-1-olga.kornievskaia@gmail.com/ ++ // and https://bugzilla.redhat.com/show_bug.cgi?id=1783554. ++ if (err == EINVAL || err == EOPNOTSUPP) ++ { ++#if !defined(BOOST_FILESYSTEM_USE_SENDFILE) ++ fallback_to_read_write: ++#endif ++ return copy_file_data_read_write(infile, outfile, size); ++ } ++ ++ if (err == EXDEV) ++ { ++#if defined(BOOST_FILESYSTEM_USE_SENDFILE) ++ fallback_to_sendfile: ++ return copy_file_data_sendfile(infile, outfile, size); ++#else ++ goto fallback_to_read_write; ++#endif ++ } ++ ++ if (err == ENOSYS) ++ { ++#if defined(BOOST_FILESYSTEM_USE_SENDFILE) ++ copy_file_data.store(©_file_data_sendfile, atomic_ns::memory_order_relaxed); ++ goto fallback_to_sendfile; ++#else ++ copy_file_data.store(©_file_data_read_write, atomic_ns::memory_order_relaxed); ++ goto fallback_to_read_write; ++#endif ++ } ++ } ++ + return err; + } + +@@ -646,13 +705,14 @@ struct copy_file_data_initializer + #endif + + #if defined(BOOST_FILESYSTEM_USE_COPY_FILE_RANGE) +- // Although copy_file_range appeared in Linux 4.5, it did not support cross-filesystem copying until 5.3 +- if (major > 5u || (major == 5u && minor >= 3u)) ++ // Although copy_file_range appeared in Linux 4.5, it did not support cross-filesystem copying until 5.3. ++ // copy_file_data_copy_file_range will fallback to copy_file_data_sendfile if copy_file_range returns EXDEV. ++ if (major > 4u || (major == 4u && minor >= 5u)) + cfd = ©_file_data_copy_file_range; + #endif + +- copy_file_data = cfd; ++ copy_file_data.store(cfd, atomic_ns::memory_order_relaxed); + } + } + const copy_file_data_init; + +@@ -1412,7 +1472,7 @@ bool copy_file(path const& from, path const& to, unsigned int options, error_cod + goto fail_errno; + } + +- err = detail::copy_file_data(infile.fd, outfile.fd, get_size(from_stat)); ++ err = detail::copy_file_data.load(atomic_ns::memory_order_relaxed)(infile.fd, outfile.fd, get_size(from_stat)); + if (BOOST_UNLIKELY(err != 0)) + goto fail; // err already contains the error code + diff --git a/boost.spec b/boost.spec index 3e0edde..6e931ea 100644 --- a/boost.spec +++ b/boost.spec @@ -168,6 +168,10 @@ Patch105: boost-1.76.0-ptr_cont-xml.patch # https://bugzilla.redhat.com/show_bug.cgi?id=2106441 Patch106: boost-1.76.0-asio-header.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=2106878 +# https://github.com/boostorg/filesystem/issues/184 +Patch107: boost-1.76.0-filesystem-copy_file-exdev.patch + %bcond_with tests %bcond_with docs_generated @@ -694,6 +698,7 @@ find ./boost -name '*.hpp' -perm /111 | xargs chmod a-x %patch102 -p1 %patch105 -p1 %patch106 -p2 +%patch107 -p1 %build %set_build_flags @@ -1311,6 +1316,7 @@ fi - Add patch to fix XML validation errors in ptr_container docs - Add BuildRequires: libzstd-devel (#2042336) - Add patch to fix Asio includes (#2106441) +- Add patch to fix filesystem::copy_file EXDEV handling (#2106878) * Thu Aug 05 2021 Thomas Rodgers - 1.76.0-4 - Third attempt at making the long double c99 and tr1 math libs conditional From 96e95e8479cbc44980cbdbb091b49094d9366ce8 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Thu, 14 Jul 2022 13:28:47 +0100 Subject: [PATCH 7/7] Add boost-json to umbrella package --- boost.spec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/boost.spec b/boost.spec index 6e931ea..185b7ff 100644 --- a/boost.spec +++ b/boost.spec @@ -85,6 +85,7 @@ Requires: %{name}-fiber%{?_isa} = %{version}-%{release} Requires: %{name}-filesystem%{?_isa} = %{version}-%{release} Requires: %{name}-graph%{?_isa} = %{version}-%{release} Requires: %{name}-iostreams%{?_isa} = %{version}-%{release} +Requires: %{name}-json%{?_isa} = %{version}-%{release} Requires: %{name}-locale%{?_isa} = %{version}-%{release} Requires: %{name}-log%{?_isa} = %{version}-%{release} Requires: %{name}-math%{?_isa} = %{version}-%{release} @@ -1317,6 +1318,7 @@ fi - Add BuildRequires: libzstd-devel (#2042336) - Add patch to fix Asio includes (#2106441) - Add patch to fix filesystem::copy_file EXDEV handling (#2106878) +- Add boost-json to umbrella package * Thu Aug 05 2021 Thomas Rodgers - 1.76.0-4 - Third attempt at making the long double c99 and tr1 math libs conditional