From 234b0e5f3a1030788c210b145a22bab109a17127 Mon Sep 17 00:00:00 2001 From: twomice Date: Mon, 18 Nov 2024 18:53:52 -0500 Subject: [PATCH 01/18] Implement and test find_first(offset) --- .../boost/dynamic_bitset/dynamic_bitset.hpp | 25 +++++----- test/bitset_test.hpp | 49 ++++++------------- test/dyn_bitset_unit_tests3.cpp | 30 ++++++------ 3 files changed, 43 insertions(+), 61 deletions(-) diff --git a/include/boost/dynamic_bitset/dynamic_bitset.hpp b/include/boost/dynamic_bitset/dynamic_bitset.hpp index a2abfc93..4ce4b8f8 100644 --- a/include/boost/dynamic_bitset/dynamic_bitset.hpp +++ b/include/boost/dynamic_bitset/dynamic_bitset.hpp @@ -325,6 +325,7 @@ class dynamic_bitset // lookup size_type find_first() const; + size_type find_first(size_type offset) const; size_type find_next(size_type pos) const; @@ -1326,7 +1327,7 @@ to_ulong() const // Check for overflows. This may be a performance burden on very // large bitsets but is required by the specification, sorry - if (find_next(ulong_width - 1) != npos) + if (find_first(ulong_width) != npos) BOOST_THROW_EXCEPTION(std::overflow_error("boost::dynamic_bitset::to_ulong overflow")); @@ -1486,29 +1487,31 @@ dynamic_bitset::find_first() const return m_do_find_from(0); } - template typename dynamic_bitset::size_type -dynamic_bitset::find_next(size_type pos) const +dynamic_bitset::find_first(size_type offset) const { - const size_type sz = size(); - if (pos >= (sz-1) || sz == 0) - return npos; + if (offset >= sz) return npos; - ++pos; - - const size_type blk = block_index(pos); - const block_width_type ind = bit_index(pos); + const size_type blk = block_index(offset); + const block_width_type ind = bit_index(offset); // shift bits upto one immediately after current const Block fore = m_bits[blk] >> ind; return fore? - pos + static_cast(detail::lowest_bit(fore)) + offset + static_cast(detail::lowest_bit(fore)) : m_do_find_from(blk + 1); +} + +template +typename dynamic_bitset::size_type +dynamic_bitset::find_next(size_type pos) const +{ + return find_first(pos + 1); } diff --git a/test/bitset_test.hpp b/test/bitset_test.hpp index d53f595c..aae4c8a0 100644 --- a/test/bitset_test.hpp +++ b/test/bitset_test.hpp @@ -967,25 +967,25 @@ struct bitset_test { BOOST_TEST(b.intersects(a) == have_intersection); } - static void find_first(const Bitset& b) + static void find_first(const Bitset& b, typename Bitset::size_type offset = 0) { - // find first non-null bit, if any - typename Bitset::size_type i = 0; - while (i < b.size() && b[i] == 0) - ++i; - - if (i == b.size()) - BOOST_TEST(b.find_first() == Bitset::npos); // not found; - else { - BOOST_TEST(b.find_first() == i); - BOOST_TEST(b.test(i) == true); - } + // find first non-null bit from offset onwards, if any + typename Bitset::size_type i = offset; + while (i < b.size() && b[i] == 0) + ++i; + if (i >= b.size()) + BOOST_TEST(b.find_first(offset) == Bitset::npos); // not found; + else { + BOOST_TEST(b.find_first(offset) == i); + BOOST_TEST(b.test(i) == true); + } } - static void find_next(const Bitset& b, typename Bitset::size_type prev) + static void find_pos(const Bitset& b, typename Bitset::size_type pos) { - BOOST_TEST(next_bit_on(b, prev) == b.find_next(prev)); + find_first(b, pos); + find_first(b, pos + 1); } static void operator_equal(const Bitset& a, const Bitset& b) @@ -1063,27 +1063,6 @@ struct bitset_test { } } - static typename Bitset::size_type next_bit_on(const Bitset& b, typename Bitset::size_type prev) - { - // helper function for find_next() - // - - if (b.none() == true || prev == Bitset::npos) - return Bitset::npos; - - ++prev; - - if (prev >= b.size()) - return Bitset::npos; - - typename Bitset::size_type i = prev; - while (i < b.size() && b[i] == 0) - ++i; - - return i==b.size() ? Bitset::npos : i; - - } - static void operator_less_than(const Bitset& a, const Bitset& b) { if (less_than(a, b)) diff --git a/test/dyn_bitset_unit_tests3.cpp b/test/dyn_bitset_unit_tests3.cpp index 5692c260..9d01b12f 100644 --- a/test/dyn_bitset_unit_tests3.cpp +++ b/test/dyn_bitset_unit_tests3.cpp @@ -329,26 +329,26 @@ void run_test_cases( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) Tests::find_first(b); } //===================================================================== - // Test find_next + // Test find_next and offset find_first { // empty bitset bitset_type b; // check - Tests::find_next(b, 0); - Tests::find_next(b, 1); - Tests::find_next(b, 200); - Tests::find_next(b, b.npos); + Tests::find_pos(b, 0); + Tests::find_pos(b, 1); + Tests::find_pos(b, 200); + Tests::find_pos(b, b.npos); } { // bitset of size 1 (find_next can never find) bitset_type b(1, 1ul); // check - Tests::find_next(b, 0); - Tests::find_next(b, 1); - Tests::find_next(b, 200); - Tests::find_next(b, b.npos); + Tests::find_pos(b, 0); + Tests::find_pos(b, 1); + Tests::find_pos(b, 200); + Tests::find_pos(b, b.npos); } { // all-1s bitset @@ -358,9 +358,9 @@ void run_test_cases( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) // check const typename bitset_type::size_type larger_than_size = 5 + b.size(); for(typename bitset_type::size_type i = 0; i <= larger_than_size; ++i) { - Tests::find_next(b, i); + Tests::find_pos(b, i); } - Tests::find_next(b, b.npos); + Tests::find_pos(b, b.npos); } { // a bitset with 1s at block boundary only @@ -379,9 +379,9 @@ void run_test_cases( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) // check const typename bitset_type::size_type larger_than_size = 5 + b.size(); for (i = 0; i <= larger_than_size; ++i) { - Tests::find_next(b, i); + Tests::find_pos(b, i); } - Tests::find_next(b, b.npos); + Tests::find_pos(b, b.npos); } { @@ -397,9 +397,9 @@ void run_test_cases( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) // check const typename bitset_type::size_type larger_than_size = 5 + b.size(); for (i = 0; i <= larger_than_size; ++i) { - Tests::find_next(b, i); + Tests::find_pos(b, i); } - Tests::find_next(b, b.npos); + Tests::find_pos(b, b.npos); } //===================================================================== From f1e294c0e289f3d2b6304ee088d7d80251e375a0 Mon Sep 17 00:00:00 2001 From: twomice Date: Mon, 18 Nov 2024 19:07:47 -0500 Subject: [PATCH 02/18] Add documentation. --- dynamic_bitset.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dynamic_bitset.html b/dynamic_bitset.html index 32ec373c..9d006e9a 100644 --- a/dynamic_bitset.html +++ b/dynamic_bitset.html @@ -238,6 +238,7 @@

Synopsis

bool intersects(const dynamic_bitset& a) const; size_type find_first() const; + size_type find_first(size_type offset) const; size_type find_next(size_type pos) const; }; @@ -1373,6 +1374,15 @@

Member Functions

Returns: the lowest index i such as bit i is set, or npos if *this has no on bits. +
+
+size_type find_first(size_type pos) const;
+
+ +Returns: the lowest index i greater or equal to +offset such as bit i is set, or npos if +no such index exists. +
 size_type find_next(size_type pos) const;

From ee7cfdf0a0891558fedabf6a74d1e0a5c788d400 Mon Sep 17 00:00:00 2001
From: twomice 
Date: Mon, 18 Nov 2024 19:09:49 -0500
Subject: [PATCH 03/18] Fix doc errors.

---
 dynamic_bitset.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dynamic_bitset.html b/dynamic_bitset.html
index 9d006e9a..c7163a10 100644
--- a/dynamic_bitset.html
+++ b/dynamic_bitset.html
@@ -1376,7 +1376,7 @@ 

Member Functions


-size_type find_first(size_type pos) const;
+size_type find_first(size_type offset) const;
 
Returns: the lowest index i greater or equal to From 065e0d2baa94909b03323f4b1833d83b114bd331 Mon Sep 17 00:00:00 2001 From: twomice Date: Tue, 19 Nov 2024 09:40:36 -0500 Subject: [PATCH 04/18] Fix incorrect behavior for npos. --- .../boost/dynamic_bitset/dynamic_bitset.hpp | 1 + test/bitset_test.hpp | 23 ++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/include/boost/dynamic_bitset/dynamic_bitset.hpp b/include/boost/dynamic_bitset/dynamic_bitset.hpp index 4ce4b8f8..e79c3011 100644 --- a/include/boost/dynamic_bitset/dynamic_bitset.hpp +++ b/include/boost/dynamic_bitset/dynamic_bitset.hpp @@ -1511,6 +1511,7 @@ template typename dynamic_bitset::size_type dynamic_bitset::find_next(size_type pos) const { + if (pos == npos) return npos; return find_first(pos + 1); } diff --git a/test/bitset_test.hpp b/test/bitset_test.hpp index aae4c8a0..758d44dc 100644 --- a/test/bitset_test.hpp +++ b/test/bitset_test.hpp @@ -985,7 +985,7 @@ struct bitset_test { static void find_pos(const Bitset& b, typename Bitset::size_type pos) { find_first(b, pos); - find_first(b, pos + 1); + BOOST_TEST(next_bit_on(b, pos) == b.find_next(pos)); } static void operator_equal(const Bitset& a, const Bitset& b) @@ -1063,6 +1063,27 @@ struct bitset_test { } } + static typename Bitset::size_type next_bit_on(const Bitset& b, typename Bitset::size_type prev) + { + // helper function for find_next() + // + + if (b.none() == true || prev == Bitset::npos) + return Bitset::npos; + + ++prev; + + if (prev >= b.size()) + return Bitset::npos; + + typename Bitset::size_type i = prev; + while (i < b.size() && b[i] == 0) + ++i; + + return i==b.size() ? Bitset::npos : i; + + } + static void operator_less_than(const Bitset& a, const Bitset& b) { if (less_than(a, b)) From 903f9f3cedbe54b1a2aa67d13cbbb6d4f98d0a6e Mon Sep 17 00:00:00 2001 From: twomice Date: Wed, 20 Nov 2024 11:23:58 -0500 Subject: [PATCH 05/18] Rename parameter "offset" to "pos" in find_first. --- dynamic_bitset.html | 4 ++-- include/boost/dynamic_bitset/dynamic_bitset.hpp | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dynamic_bitset.html b/dynamic_bitset.html index c7163a10..9ccbef0f 100644 --- a/dynamic_bitset.html +++ b/dynamic_bitset.html @@ -238,7 +238,7 @@

Synopsis

bool intersects(const dynamic_bitset& a) const; size_type find_first() const; - size_type find_first(size_type offset) const; + size_type find_first(size_type pos) const; size_type find_next(size_type pos) const; }; @@ -1376,7 +1376,7 @@

Member Functions


-size_type find_first(size_type offset) const;
+size_type find_first(size_type pos) const;
 
Returns: the lowest index i greater or equal to diff --git a/include/boost/dynamic_bitset/dynamic_bitset.hpp b/include/boost/dynamic_bitset/dynamic_bitset.hpp index e79c3011..06ec9712 100644 --- a/include/boost/dynamic_bitset/dynamic_bitset.hpp +++ b/include/boost/dynamic_bitset/dynamic_bitset.hpp @@ -325,7 +325,7 @@ class dynamic_bitset // lookup size_type find_first() const; - size_type find_first(size_type offset) const; + size_type find_first(size_type pos) const; size_type find_next(size_type pos) const; @@ -1489,19 +1489,19 @@ dynamic_bitset::find_first() const template typename dynamic_bitset::size_type -dynamic_bitset::find_first(size_type offset) const +dynamic_bitset::find_first(size_type pos) const { const size_type sz = size(); - if (offset >= sz) return npos; + if (pos >= sz) return npos; - const size_type blk = block_index(offset); - const block_width_type ind = bit_index(offset); + const size_type blk = block_index(pos); + const block_width_type ind = bit_index(pos); // shift bits upto one immediately after current const Block fore = m_bits[blk] >> ind; return fore? - offset + static_cast(detail::lowest_bit(fore)) + pos + static_cast(detail::lowest_bit(fore)) : m_do_find_from(blk + 1); } From c4dac9106a34f640cced16cd4906701554097573 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Mon, 11 Mar 2024 08:33:30 -0500 Subject: [PATCH 06/18] Make the library modular usable. --- Jamfile | 11 ----------- build.jam | 27 +++++++++++++++++++++++++++ example/Jamfile | 3 ++- test/Jamfile.v2 | 12 ++++++++---- 4 files changed, 37 insertions(+), 16 deletions(-) delete mode 100644 Jamfile create mode 100644 build.jam diff --git a/Jamfile b/Jamfile deleted file mode 100644 index 8f6db438..00000000 --- a/Jamfile +++ /dev/null @@ -1,11 +0,0 @@ -# Boost.DynamicBitset Library Jamfile -# -# Copyright (c) 2018 James E. King III -# -# Use, modification, and distribution are subject to the -# Boost Software License, Version 1.0. (See accompanying file -# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) - -# please order by name to ease maintenance -build-project example ; -build-project test ; diff --git a/build.jam b/build.jam new file mode 100644 index 00000000..51564502 --- /dev/null +++ b/build.jam @@ -0,0 +1,27 @@ +# Copyright René Ferdinand Rivera Morell 2023 +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import project ; + +project /boost/dynamic_bitset + : common-requirements + /boost/assert//boost_assert + /boost/config//boost_config + /boost/container_hash//boost_container_hash + /boost/core//boost_core + /boost/integer//boost_integer + /boost/move//boost_move + /boost/static_assert//boost_static_assert + /boost/throw_exception//boost_throw_exception + include + ; + +explicit + [ alias boost_dynamic_bitset ] + [ alias all : boost_dynamic_bitset example test ] + ; + +call-if : boost-library dynamic_bitset + ; diff --git a/example/Jamfile b/example/Jamfile index 6b4b0f3e..8093ca98 100644 --- a/example/Jamfile +++ b/example/Jamfile @@ -9,7 +9,8 @@ exe timing_tests : timing_tests.cpp - ../../timer/build//boost_timer + /boost/timer//boost_timer + /boost/detail//boost_detail ; exe example1 diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 91f91def..4e38eac0 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -9,13 +9,16 @@ import os ; # import rules for testing conditional on config file variables -import ../../config/checks/config : requires ; +import config : requires ; test-suite dynamic_bitset : - [ run dyn_bitset_unit_tests1.cpp : : : /boost/system//boost_system ] - [ run dyn_bitset_unit_tests2.cpp : : : /boost/system//boost_system ] - [ run dyn_bitset_unit_tests3.cpp : : : /boost/system//boost_system ] + [ run dyn_bitset_unit_tests1.cpp : : : /boost/filesystem//boost_filesystem + /boost/system//boost_system ] + [ run dyn_bitset_unit_tests2.cpp : : : /boost/filesystem//boost_filesystem + /boost/system//boost_system ] + [ run dyn_bitset_unit_tests3.cpp : : : /boost/filesystem//boost_filesystem + /boost/system//boost_system ] [ run dyn_bitset_unit_tests4.cpp : : : /boost/filesystem//boost_filesystem /boost/system//boost_system ] [ run test_ambiguous_set.cpp ] @@ -36,6 +39,7 @@ if ! [ os.environ UBSAN_OPTIONS ] [ run dyn_bitset_unit_tests5.cpp : : : _SCL_SECURE_NO_WARNINGS=1 + /boost/filesystem//boost_filesystem /boost/serialization//boost_serialization /boost/system//boost_system ] ; From bea09ac113c3d88b6ae675826a8dc2c1c701cfe3 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Fri, 29 Mar 2024 21:15:58 -0500 Subject: [PATCH 07/18] Switch to library requirements instead of source. As source puts extra source in install targets. --- build.jam | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/build.jam b/build.jam index 51564502..c489bde0 100644 --- a/build.jam +++ b/build.jam @@ -7,14 +7,14 @@ import project ; project /boost/dynamic_bitset : common-requirements - /boost/assert//boost_assert - /boost/config//boost_config - /boost/container_hash//boost_container_hash - /boost/core//boost_core - /boost/integer//boost_integer - /boost/move//boost_move - /boost/static_assert//boost_static_assert - /boost/throw_exception//boost_throw_exception + /boost/assert//boost_assert + /boost/config//boost_config + /boost/container_hash//boost_container_hash + /boost/core//boost_core + /boost/integer//boost_integer + /boost/move//boost_move + /boost/static_assert//boost_static_assert + /boost/throw_exception//boost_throw_exception include ; From a7c45eca9a16291c015ce64374d25a530c1fb791 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Thu, 25 Apr 2024 08:31:33 -0500 Subject: [PATCH 08/18] Add missing b2 testing module import. --- test/Jamfile.v2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 4e38eac0..f9d4fd21 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -7,6 +7,7 @@ # import os ; +import testing ; # import rules for testing conditional on config file variables import config : requires ; @@ -25,7 +26,7 @@ test-suite dynamic_bitset : [ run test_lowest_bit.cpp ] [ run test_boost_hash.cpp ] - [ run test_std_hash.cpp : : : [ requires cxx11_hdr_unordered_set ] ] + [ run test_std_hash.cpp : : : [ requires cxx11_hdr_unordered_set ] ] [ compile-fail test_std_hash.cpp : [ requires cxx11_hdr_unordered_set ] BOOST_DYNAMIC_BITSET_NO_STD_HASH From a83d6af538d30fa82a45e2db85021e6323edc914 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Sat, 4 May 2024 23:29:10 -0500 Subject: [PATCH 09/18] Add missing import-search for cconfig/predef checks. --- test/Jamfile.v2 | 1 + 1 file changed, 1 insertion(+) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index f9d4fd21..a2895ad4 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -10,6 +10,7 @@ import os ; import testing ; # import rules for testing conditional on config file variables +import-search /boost/config/checks ; import config : requires ; test-suite dynamic_bitset : From 9512fa6f20a5cdbbd4113560f881ea6e5a34315c Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Sun, 5 May 2024 09:00:01 -0500 Subject: [PATCH 10/18] Add requires-b2 check to top-level build file. --- build.jam | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.jam b/build.jam index c489bde0..28b94b5b 100644 --- a/build.jam +++ b/build.jam @@ -3,6 +3,8 @@ # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +require-b2 5.1 ; + import project ; project /boost/dynamic_bitset From da25c2f8c822a3cafbb871bacec8b9a38e70cef9 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Fri, 14 Jun 2024 11:33:55 -0500 Subject: [PATCH 11/18] Bump B2 require to 5.2 --- build.jam | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/build.jam b/build.jam index 28b94b5b..f5990f19 100644 --- a/build.jam +++ b/build.jam @@ -3,9 +3,7 @@ # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) -require-b2 5.1 ; - -import project ; +require-b2 5.2 ; project /boost/dynamic_bitset : common-requirements From 70b0a9dcacbeee066762f419371c4d8508e965af Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Sat, 20 Jul 2024 22:52:04 -0500 Subject: [PATCH 12/18] Update copyright dates. --- build.jam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.jam b/build.jam index f5990f19..a0a0aa9f 100644 --- a/build.jam +++ b/build.jam @@ -1,4 +1,4 @@ -# Copyright René Ferdinand Rivera Morell 2023 +# Copyright René Ferdinand Rivera Morell 2023-2024 # Distributed under the Boost Software License, Version 1.0. # (See accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) From 82e497712f036474a9966526ce78c161d716c5d2 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Tue, 23 Jul 2024 22:34:22 -0500 Subject: [PATCH 13/18] Move inter-lib dependencies to a project variable and into the build targets. --- build.jam | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/build.jam b/build.jam index a0a0aa9f..6e5741b2 100644 --- a/build.jam +++ b/build.jam @@ -5,23 +5,26 @@ require-b2 5.2 ; +constant boost_dependencies : + /boost/assert//boost_assert + /boost/config//boost_config + /boost/container_hash//boost_container_hash + /boost/core//boost_core + /boost/integer//boost_integer + /boost/move//boost_move + /boost/static_assert//boost_static_assert + /boost/throw_exception//boost_throw_exception ; + project /boost/dynamic_bitset : common-requirements - /boost/assert//boost_assert - /boost/config//boost_config - /boost/container_hash//boost_container_hash - /boost/core//boost_core - /boost/integer//boost_integer - /boost/move//boost_move - /boost/static_assert//boost_static_assert - /boost/throw_exception//boost_throw_exception include ; explicit - [ alias boost_dynamic_bitset ] + [ alias boost_dynamic_bitset : : : : $(boost_dependencies) ] [ alias all : boost_dynamic_bitset example test ] ; call-if : boost-library dynamic_bitset ; + From 1ee0eafa7f95488faae459fb5f471c32263fd7a3 Mon Sep 17 00:00:00 2001 From: Rene Rivera Date: Fri, 2 Aug 2024 08:34:14 -0500 Subject: [PATCH 14/18] Update build deps. --- example/Jamfile | 6 ++++-- test/Jamfile.v2 | 2 ++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/example/Jamfile b/example/Jamfile index 8093ca98..cad7589a 100644 --- a/example/Jamfile +++ b/example/Jamfile @@ -7,8 +7,10 @@ # # ----------------------------------------------------------- -exe timing_tests - : timing_tests.cpp +project : requirements /boost/dynamic_bitset//boost_dynamic_bitset ; + +exe timing_tests + : timing_tests.cpp /boost/timer//boost_timer /boost/detail//boost_detail ; diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index a2895ad4..6d173044 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -13,6 +13,8 @@ import testing ; import-search /boost/config/checks ; import config : requires ; +project : requirements /boost/dynamic_bitset//boost_dynamic_bitset ; + test-suite dynamic_bitset : [ run dyn_bitset_unit_tests1.cpp : : : /boost/filesystem//boost_filesystem From 2f74ec3f42f2da31033f2113fefb5de7b417a3d8 Mon Sep 17 00:00:00 2001 From: "James E. King III" Date: Mon, 25 Nov 2024 15:11:15 +0000 Subject: [PATCH 15/18] Refresh GitHub Actions and Appveyor CI Moved baseline to C++11 due to our dependencies. - Remove C++98 and C++03 from CI and mark C++11 baseline - Remove duplicate jobs between Appveyor and GHA - Disable CMake GHA jobs for now; broken --- .appveyor.yml | 21 +-- .github/workflows/ci.yml | 304 ++++++++++++++++++++++++++++----------- README.md | 2 +- meta/libraries.json | 2 +- 4 files changed, 227 insertions(+), 102 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index ccb58f35..0e7a3b55 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -64,40 +64,25 @@ environment: B2_CXXSTD: 14,17 B2_TOOLSET: msvc-14.1 - - FLAVOR: clang-cl - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: 64 - B2_CXXSTD: 11,14,17 - B2_TOOLSET: clang-win - - - FLAVOR: Visual Studio 2015, 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - B2_TOOLSET: msvc-12.0,msvc-14.0 - - - FLAVOR: Visual Studio 2008, 2010, 2012 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - B2_TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0 - B2_ADDRESS_MODEL: 32 # No 64bit support - - FLAVOR: cygwin (32-bit) APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ADDPATH: C:\cygwin\bin; B2_ADDRESS_MODEL: 32 - B2_CXXSTD: 03,11,14,1z + B2_CXXSTD: 11,14,1z B2_TOOLSET: gcc - FLAVOR: cygwin (64-bit) APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ADDPATH: C:\cygwin64\bin; B2_ADDRESS_MODEL: 64 - B2_CXXSTD: 03,11,14,1z + B2_CXXSTD: 11,14,1z B2_TOOLSET: gcc - FLAVOR: mingw64 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin; B2_ADDRESS_MODEL: 64 - B2_CXXSTD: 03,11,14,17,2a + B2_CXXSTD: 11,14,17,2a B2_TOOLSET: gcc install: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a626eb0..f825ad08 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,45 +43,51 @@ jobs: matrix: include: # Linux, gcc - - { compiler: gcc-4.8, cxxstd: '03,11', os: ubuntu-18.04 } - - { compiler: gcc-5, cxxstd: '03,11,14,1z', os: ubuntu-18.04 } - - { compiler: gcc-6, cxxstd: '03,11,14,17', os: ubuntu-18.04 } - - { compiler: gcc-7, cxxstd: '03,11,14,17', os: ubuntu-18.04 } - - { compiler: gcc-8, cxxstd: '03,11,14,17,2a', os: ubuntu-18.04 } - - { compiler: gcc-9, cxxstd: '03,11,14,17,2a', os: ubuntu-18.04 } - - { compiler: gcc-10, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } - - { compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + - { compiler: gcc-5, cxxstd: '11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-6, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-7, cxxstd: '11,14,17', os: ubuntu-20.04 } + - { compiler: gcc-8, cxxstd: '11,14,17,2a', os: ubuntu-20.04 } + - { compiler: gcc-9, cxxstd: '11,14,17,2a', os: ubuntu-20.04 } + - { compiler: gcc-10, cxxstd: '11,14,17,20', os: ubuntu-20.04 } + - { compiler: gcc-11, cxxstd: '11,14,17,20', os: ubuntu-20.04 } + - { compiler: gcc-12, cxxstd: '11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-13, cxxstd: '11,14,17,20,2b', os: ubuntu-22.04 } + - { compiler: gcc-14, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } - { name: GCC w/ sanitizers, sanitize: yes, - compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + compiler: gcc-12, cxxstd: '11,14,17,20', os: ubuntu-22.04 } - { name: Collect coverage, coverage: yes, - compiler: gcc-10, cxxstd: '03,11', os: ubuntu-20.04, install: 'g++-10-multilib', address-model: '32,64' } + compiler: gcc-8, cxxstd: '11', os: ubuntu-20.04, install: 'g++-8-multilib', address-model: '32,64' } # Linux, clang - - { compiler: clang-3.5, cxxstd: '03,11', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: clang-3.6, cxxstd: '03,11,14', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: clang-3.7, cxxstd: '03,11,14', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: clang-3.8, cxxstd: '03,11,14', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: clang-3.9, cxxstd: '03,11,14', os: ubuntu-18.04 } - - { compiler: clang-4.0, cxxstd: '03,11,14', os: ubuntu-18.04 } - - { compiler: clang-5.0, cxxstd: '03,11,14,1z', os: ubuntu-18.04 } - - { compiler: clang-6.0, cxxstd: '03,11,14,17', os: ubuntu-18.04 } - - { compiler: clang-7, cxxstd: '03,11,14,17', os: ubuntu-18.04 } + - { compiler: clang-3.9, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-4.0, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-5.0, cxxstd: '11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-6.0, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-7, cxxstd: '11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } # Note: clang-8 does not fully support C++20, so it is not compatible with some libstdc++ versions in this mode - - { compiler: clang-8, cxxstd: '03,11,14,17,2a', os: ubuntu-18.04, install: 'clang-8 g++-7', gcc_toolchain: 7 } - - { compiler: clang-9, cxxstd: '03,11,14,17,2a', os: ubuntu-20.04 } - - { compiler: clang-10, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } - - { compiler: clang-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } - - { name: Clang w/ valgrind, valgrind: yes, - compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, install: 'valgrind' } + - { compiler: clang-8, cxxstd: '11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:18.04', install: 'clang-8 g++-7', gcc_toolchain: 7 } + - { compiler: clang-9, cxxstd: '11,14,17,2a', os: ubuntu-20.04 } + - { compiler: clang-10, cxxstd: '11,14,17,20', os: ubuntu-20.04 } + - { compiler: clang-11, cxxstd: '11,14,17,20', os: ubuntu-20.04 } + - { compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-20.04 } + # Clang isn't compatible with libstdc++-13, so use the slightly older one + - { compiler: clang-13, cxxstd: '11,14,17,20', os: ubuntu-22.04, install: 'clang-13 g++-12', gcc_toolchain: 12 } + - { compiler: clang-14, cxxstd: '11,14,17,20', os: ubuntu-22.04, install: 'clang-14 g++-12', gcc_toolchain: 12 } + - { compiler: clang-15, cxxstd: '11,14,17,20', os: ubuntu-22.04, install: 'clang-15 g++-12', gcc_toolchain: 12 } + - { compiler: clang-16, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } + - { compiler: clang-17, cxxstd: '11,14,17,20,23', os: ubuntu-24.04 } + - { compiler: clang-18, cxxstd: '11,17,20,23,2c', os: ubuntu-24.04 } # libc++ - - { compiler: clang-6.0, cxxstd: '03,11,14', os: ubuntu-18.04, stdlib: libc++, install: 'clang-6.0 libc++-dev libc++abi-dev' } - - { compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev' } + - { compiler: clang-6.0, cxxstd: '11,14', os: ubuntu-latest, container: 'ubuntu:18.04', stdlib: libc++, install: 'clang-6.0 libc++-dev libc++abi-dev' } + - { compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-20.04, stdlib: 'libc++', install: 'clang-12 libc++-12-dev libc++abi-12-dev' } - { name: Clang w/ sanitizers, sanitize: yes, - compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev' } + compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-20.04, stdlib: 'libc++', install: 'clang-12 libc++-12-dev libc++abi-12-dev' } - # OSX, clang - - { compiler: clang, cxxstd: '03,11,14,17,2a', os: macos-10.15, sanitize: yes } + - { compiler: clang, cxxstd: '11,14,17,20', os: macos-12 } + - { name: MacOS w/ clang and sanitizers, + compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-13, sanitize: yes } + - { compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-14 } # Coverity Scan # requires two github secrets in repo to activate; see ci/github/coverity.sh @@ -91,8 +97,7 @@ jobs: # multiarch (bigendian testing) - does not support coverage yet - { name: Big-endian, multiarch: yes, - compiler: clang, cxxstd: '17', os: ubuntu-20.04, ccache: no, distro: fedora, edition: 34, arch: s390x } - + compiler: clang, cxxstd: '17', os: ubuntu-22.04, ccache: no, distro: fedora, edition: 34, arch: s390x } timeout-minutes: 120 runs-on: ${{matrix.os}} @@ -108,41 +113,72 @@ jobs: fi if [ -n "${{matrix.container}}" ] && [ -f "/etc/debian_version" ]; then apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common - # Need (newer) git + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common curl + # Need (newer) git, and the older Ubuntu container may require requesting the key manually using port 80 + curl -sSL --retry ${NET_RETRY_COUNT:-5} 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xE1DD270288B4E6030699E45FA1715D88E1DF1F24' | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/git-core_ubuntu_ppa.gpg for i in {1..${NET_RETRY_COUNT:-3}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ python libpython-dev git + osver=$(lsb_release -sr | cut -f1 -d.) + pkgs="g++ git" + # Ubuntu 22+ has only Python 3 in the repos + if [ -n "$osver" ] && [ "$osver" -ge "22" ]; then + pkgs+=" python-is-python3 libpython3-dev" + else + pkgs+=" python libpython-dev" + fi + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs fi - # multiple job types are not compatible with ccache, they use "ccache: no" in the matrix + # For jobs not compatible with ccache, use "ccache: no" in the matrix if [[ "${{ matrix.ccache }}" == "no" ]]; then echo "B2_USE_CCACHE=0" >> $GITHUB_ENV fi - if [[ "${{ matrix.valgrind }}" == "yes" ]]; then - echo "B2_DEFINES=BOOST_NO_STRESS_TEST=1" >> $GITHUB_ENV - echo "B2_TESTFLAGS=testing.launcher=valgrind" >> $GITHUB_ENV - echo "B2_FLAGS=define=BOOST_USE_VALGRIND=1" >> $GITHUB_ENV - echo "VALGRIND_OPTS=--error-exitcode=1" >> $GITHUB_ENV - fi git config --global pack.threads 0 + if [[ "${{matrix.container}}" == "ubuntu:16.04" ]] || [[ "${{matrix.container}}" == "ubuntu:18.04" ]]; then + # Ubuntu 16/18 can't run Node 20, so stick to older actions: https://github.com/actions/checkout/issues/1590 + echo "GHA_USE_NODE_20=false" >> $GITHUB_ENV + echo "ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION=true" >> $GITHUB_ENV + else + echo "GHA_USE_NODE_20=true" >> $GITHUB_ENV + fi - uses: actions/checkout@v3 + if: env.GHA_USE_NODE_20 == 'false' + with: + # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' + fetch-depth: ${{ matrix.coverage && '0' || '1' }} + - uses: actions/checkout@v4 + if: env.GHA_USE_NODE_20 == 'true' with: # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' fetch-depth: ${{ matrix.coverage && '0' || '1' }} - name: Cache ccache uses: actions/cache@v3 - if: env.B2_USE_CCACHE + if: env.B2_USE_CCACHE && env.GHA_USE_NODE_20 == 'false' + with: + path: ~/.ccache + key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{github.sha}} + restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- + + - name: Cache ccache + uses: actions/cache@v4 + if: env.B2_USE_CCACHE && env.GHA_USE_NODE_20 == 'true' with: path: ~/.ccache key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{github.sha}} - restore-keys: | - ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- - ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}} + restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- - name: Fetch Boost.CI uses: actions/checkout@v3 + if: env.GHA_USE_NODE_20 == 'false' + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + + - name: Fetch Boost.CI + uses: actions/checkout@v4 + if: env.GHA_USE_NODE_20 == 'true' with: repository: boostorg/boost-ci ref: master @@ -160,17 +196,14 @@ jobs: SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) SOURCES=(${{join(matrix.sources, ' ')}}) # Add this by default + SOURCE_KEYS+=('http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1E9377A2BA9EF27F') SOURCES+=(ppa:ubuntu-toolchain-r/test) - for key in "${SOURCE_KEYS[@]}"; do - for i in {1..$NET_RETRY_COUNT}; do - wget -O - "$key" | sudo apt-key add - && break || sleep 10 - done - done - for source in "${SOURCES[@]}"; do - for i in {1..$NET_RETRY_COUNT}; do - sudo add-apt-repository $source && break || sleep 10 - done - done + + ci/add-apt-keys.sh "${SOURCE_KEYS[@]}" + # Initial update before adding sources required to get e.g. keys + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + ci/add-apt-repositories.sh "${SOURCES[@]}" + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update if [[ -z "${{matrix.install}}" ]]; then pkgs="${{matrix.compiler}}" @@ -185,6 +218,9 @@ jobs: run: | GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV + if ! command -v dpkg-architecture; then + apt-get install -y dpkg-dev + fi MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" mkdir -p "$GCC_TOOLCHAIN_ROOT" ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" @@ -194,16 +230,11 @@ jobs: - name: Setup multiarch if: matrix.multiarch - run: | - sudo apt-get install --no-install-recommends -y binfmt-support qemu-user-static - sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - git clone https://github.com/jeking3/bdde.git - echo "$(pwd)/bdde/bin/linux" >> ${GITHUB_PATH} - echo "BDDE_DISTRO=${{ matrix.distro }}" >> ${GITHUB_ENV} - echo "BDDE_EDITION=${{ matrix.edition }}" >> ${GITHUB_ENV} - echo "BDDE_ARCH=${{ matrix.arch }}" >> ${GITHUB_ENV} - echo "B2_DEFINES=BOOST_NO_STRESS_TEST=1" >> ${GITHUB_ENV} - echo "B2_WRAPPER=bdde" >> ${GITHUB_ENV} + env: + BDDE_DISTRO: ${{matrix.distro}} + BDDE_EDITION: ${{matrix.edition}} + BDDE_ARCH: ${{matrix.arch}} + run: ci/github/setup_bdde.sh - name: Setup Boost env: @@ -212,6 +243,13 @@ jobs: B2_CXXSTD: ${{matrix.cxxstd}} B2_SANITIZE: ${{matrix.sanitize}} B2_STDLIB: ${{matrix.stdlib}} + # More entries can be added in the same way, see the B2_ARGS assignment in ci/enforce.sh for the possible keys. + # B2_DEFINES: ${{matrix.defines}} + # Variables set here (to non-empty) will override the top-level environment variables, e.g. + # B2_VARIANT: ${{matrix.variant}} + # Set the (B2) target(s) to build, defaults to the test folder of the current library + # Can alternatively be done like this in the build step or in the build command of the build step, e.g. `run: B2_TARGETS=libs/$SELF/doc ci/build.sh` + # B2_TARGETS: libs/foo/test//bar run: source ci/github/install.sh - name: Setup coverage collection @@ -222,9 +260,21 @@ jobs: if: '!matrix.coverity' run: ci/build.sh - - name: Upload coverage + - name: Collect coverage if: matrix.coverage run: ci/codecov.sh "upload" + env: + BOOST_CI_CODECOV_IO_UPLOAD: skip + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v4 + with: + disable_search: true + file: coverage.info + name: Github Actions + token: ${{secrets.CODECOV_TOKEN}} + verbose: true - name: Run coverity if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') @@ -241,18 +291,21 @@ jobs: fail-fast: false matrix: include: + - { toolset: msvc-14.0, cxxstd: '14,latest', addrmd: '32,64', os: windows-2019 } - { toolset: msvc-14.2, cxxstd: '14,17,20', addrmd: '32,64', os: windows-2019 } + - { toolset: msvc-14.3, cxxstd: '14,17,20,latest',addrmd: '32,64', os: windows-2022 } - { name: Collect coverage, coverage: yes, - toolset: msvc-14.3, cxxstd: '14,17,20', addrmd: '32,64', os: windows-2022 } - - { toolset: gcc, cxxstd: '03,11,14,17,2a', addrmd: '64', os: windows-2019 } + toolset: msvc-14.3, cxxstd: 'latest', addrmd: '64', os: windows-2022 } + - { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: windows-2022 } + - { toolset: gcc, cxxstd: '11,14,17,2a', addrmd: '64', os: windows-2019 } runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Fetch Boost.CI - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: repository: boostorg/boost-ci ref: master @@ -285,11 +338,73 @@ jobs: - name: Upload coverage if: matrix.coverage - uses: codecov/codecov-action@v2 + uses: codecov/codecov-action@v4 with: - files: __out/cobertura.xml + disable_search: true + file: __out/cobertura.xml + name: Github Actions + token: ${{secrets.CODECOV_TOKEN}} + verbose: true + + MSYS2: + defaults: + run: + shell: msys2 {0} + strategy: + fail-fast: false + matrix: + include: + - { sys: MINGW32, compiler: gcc, cxxstd: '11,17,20' } + - { sys: MINGW64, compiler: gcc, cxxstd: '11,17,20' } + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup MSYS2 environment + uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.sys}} + update: true + install: git python + pacboy: gcc:p cmake:p ninja:p + + - name: Fetch Boost.CI + uses: actions/checkout@v4 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + - name: Get CI scripts folder + run: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Setup Boost + env: + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + run: ci/github/install.sh + + - name: Run tests + run: ci/build.sh + + # Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS + - name: Run CMake tests + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config Debug -j$B2_JOBS + ctest --output-on-failure --build-config Debug CMake: + # these are broken right now + if: false defaults: run: shell: bash @@ -298,37 +413,62 @@ jobs: fail-fast: false matrix: include: - - { os: ubuntu-20.04, build_shared: ON, build_type: Release, generator: 'Unix Makefiles' } + - { os: ubuntu-20.04, build_shared: ON, build_type: Debug, generator: 'Unix Makefiles' } - { os: ubuntu-20.04, build_shared: OFF, build_type: Debug, generator: 'Unix Makefiles' } - - { os: windows-2019, build_shared: ON, build_type: Release, generator: 'Visual Studio 16 2019' } + - { os: windows-2019, build_shared: ON, build_type: Debug, generator: 'Visual Studio 16 2019' } - { os: windows-2019, build_shared: OFF, build_type: Debug, generator: 'Visual Studio 16 2019' } timeout-minutes: 120 runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v2 - + - uses: actions/checkout@v4 - name: Fetch Boost.CI - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: repository: boostorg/boost-ci ref: master path: boost-ci-cloned - - name: Get CI scripts folder run: | # Copy ci folder if not testing Boost.CI [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . rm -rf boost-ci-cloned - - name: Setup Boost env: {B2_DONT_BOOTSTRAP: 1} run: source ci/github/install.sh - - name: Run CMake + - name: Run CMake tests run: | cd "$BOOST_ROOT" mkdir __build_cmake_test__ && cd __build_cmake_test__ cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. - cmake --build . --config ${{matrix.build_type}} + cmake --build . --target tests --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Run CMake subdir tests + run: | + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_subdir_test" + cd "$cmake_test_folder" + mkdir __build_cmake_subdir_test__ && cd __build_cmake_subdir_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=OFF -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Install Library + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_INSTALL_PREFIX=~/.local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. + cmake --build . --target install --config ${{matrix.build_type}} -j$B2_JOBS + - name: Run CMake install tests + run: | + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_install_test" + cd "$cmake_test_folder" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_PREFIX_PATH=~/.local .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + diff --git a/README.md b/README.md index d63e2da5..6dca6b13 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Distributed under the [Boost Software License, Version 1.0](http://www.boost.org ### Properties -* C++03 +* C++11 * Header-only ### Build Status diff --git a/meta/libraries.json b/meta/libraries.json index ed28908b..76418240 100644 --- a/meta/libraries.json +++ b/meta/libraries.json @@ -13,5 +13,5 @@ "maintainers": [ "Jeremy Siek " ], - "cxxstd": "03" + "cxxstd": "11" } From 13379810ee99fbfbb50f0ac4602992234bba25d5 Mon Sep 17 00:00:00 2001 From: "James E. King III" Date: Mon, 25 Nov 2024 20:07:45 +0000 Subject: [PATCH 16/18] Remove GHA macos-12 as it is not offered any more. --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f825ad08..8d1b4e4e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,7 +84,6 @@ jobs: - { name: Clang w/ sanitizers, sanitize: yes, compiler: clang-12, cxxstd: '11,14,17,20', os: ubuntu-20.04, stdlib: 'libc++', install: 'clang-12 libc++-12-dev libc++abi-12-dev' } - - { compiler: clang, cxxstd: '11,14,17,20', os: macos-12 } - { name: MacOS w/ clang and sanitizers, compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-13, sanitize: yes } - { compiler: clang, cxxstd: '11,14,17,20,2b', os: macos-14 } From ff8e0d8edbf9d0f33789909c0052e044593e8758 Mon Sep 17 00:00:00 2001 From: "James E. King III" Date: Mon, 25 Nov 2024 22:20:32 +0000 Subject: [PATCH 17/18] Appveyor: move to cppalliance account - Removed MINGW64 run from Appveyor, as it is done in GHA. - Updated README to use badges from cppalliance org. --- .appveyor.yml | 7 ------- README.md | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 0e7a3b55..a056ca39 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -78,13 +78,6 @@ environment: B2_CXXSTD: 11,14,1z B2_TOOLSET: gcc - - FLAVOR: mingw64 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin; - B2_ADDRESS_MODEL: 64 - B2_CXXSTD: 11,14,17,2a - B2_TOOLSET: gcc - install: - git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned # Copy ci folder if not testing Boost.CI diff --git a/README.md b/README.md index 6dca6b13..deb2f51b 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ Distributed under the [Boost Software License, Version 1.0](http://www.boost.org Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | :-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- | -[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/keyn57y5d3sl1gw5/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/dynamic_bitset-jv17p/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/dynamic_bitset.html) -[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/keyn57y5d3sl1gw5/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/dynamic_bitset-jv17p/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitset.html) +[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/n7bki5ka3v918r5r?svg=true)](https://ci.appveyor.com/project/cppalliance/dynamic-bitset) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/dynamic_bitset.html) +[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/n7bki5ka3v918r5r/branch/develop?svg=true)](https://ci.appveyor.com/project/cppalliance/dynamic-bitset/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitset.html) ### Directories From 2cc1b35e3cfa35c624e166f76939cd0237f41a79 Mon Sep 17 00:00:00 2001 From: "James E. King III" Date: Mon, 25 Nov 2024 22:27:27 +0000 Subject: [PATCH 18/18] Fix documentation links in the README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index deb2f51b..c9529525 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ Distributed under the [Boost Software License, Version 1.0](http://www.boost.org Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | :-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- | -[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/n7bki5ka3v918r5r?svg=true)](https://ci.appveyor.com/project/cppalliance/dynamic-bitset) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/dynamic_bitset.html) -[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/n7bki5ka3v918r5r/branch/develop?svg=true)](https://ci.appveyor.com/project/cppalliance/dynamic-bitset/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitset.html) +[`master`](https://github.com/boostorg/dynamic_bitset/tree/master) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/n7bki5ka3v918r5r?svg=true)](https://ci.appveyor.com/project/cppalliance/dynamic-bitset) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/dynamic_bitset/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/dynamic_bitset.html) +[`develop`](https://github.com/boostorg/dynamic_bitset/tree/develop) | [![Build Status](https://github.com/boostorg/dynamic_bitset/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/dynamic_bitset/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/n7bki5ka3v918r5r/branch/develop?svg=true)](https://ci.appveyor.com/project/cppalliance/dynamic-bitset/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16167/badge.svg)](https://scan.coverity.com/projects/boostorg-dynamic_bitset) | [![codecov](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/dynamic_bitset/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/dynamic_bitset.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/dynamic_bitset/dynamic_bitset.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/dynamic_bitset.html) ### Directories