From 7bd9f0231db8e5c174aac12485aa5f818616b235 Mon Sep 17 00:00:00 2001 From: Ivan Komissarov Date: Mon, 3 May 2021 22:26:13 +0200 Subject: [PATCH 01/20] Do not check the birand/bitor macros in cplusplus mode Some 3rdparty parsers (e.g. Qt moc) fail to parse the bitand.hpp due to the fact that bitand is a keyword in C++, not a macro. Modern MSVC versions define bitand/bitor only if __cplusplus macro is not defined, see iso646.h: https://pastebin.com/zTcd0juT Thus, boost can also check the macro only in C mode making moc happy --- include/boost/mpl/and.hpp | 4 ++-- include/boost/mpl/bitand.hpp | 4 ++-- include/boost/mpl/bitor.hpp | 4 ++-- include/boost/mpl/or.hpp | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/boost/mpl/and.hpp b/include/boost/mpl/and.hpp index 5032a3b1e..a6f489248 100644 --- a/include/boost/mpl/and.hpp +++ b/include/boost/mpl/and.hpp @@ -28,7 +28,7 @@ // 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)' // has to be checked in a separate condition, otherwise GCC complains // about 'and' being an alternative token -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(and) # pragma push_macro("and") @@ -41,7 +41,7 @@ # define BOOST_MPL_PREPROCESSED_HEADER and.hpp # include -#if defined(_MSC_VER) && !defined(__clang__) +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(and) # pragma pop_macro("and") diff --git a/include/boost/mpl/bitand.hpp b/include/boost/mpl/bitand.hpp index 3d7598070..82261d09e 100644 --- a/include/boost/mpl/bitand.hpp +++ b/include/boost/mpl/bitand.hpp @@ -19,7 +19,7 @@ // macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)' // has to be checked in a separate condition, otherwise GCC complains // about 'bitand' being an alternative token -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(bitand) # pragma push_macro("bitand") @@ -34,7 +34,7 @@ #define AUX778076_OP_TOKEN & #include -#if defined(_MSC_VER) && !defined(__clang__) +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(bitand) # pragma pop_macro("bitand") diff --git a/include/boost/mpl/bitor.hpp b/include/boost/mpl/bitor.hpp index 05348c3ed..9bd4da253 100644 --- a/include/boost/mpl/bitor.hpp +++ b/include/boost/mpl/bitor.hpp @@ -19,7 +19,7 @@ // macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)' // has to be checked in a separate condition, otherwise GCC complains // about 'bitor' being an alternative token -#if defined(_MSC_VER) +#if defined(_MSC_VER) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(bitor) # pragma push_macro("bitor") @@ -34,7 +34,7 @@ #define AUX778076_OP_TOKEN | #include -#if defined(_MSC_VER) && !defined(__clang__) +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(bitor) # pragma pop_macro("bitor") diff --git a/include/boost/mpl/or.hpp b/include/boost/mpl/or.hpp index da290e38b..337e53ae8 100644 --- a/include/boost/mpl/or.hpp +++ b/include/boost/mpl/or.hpp @@ -29,7 +29,7 @@ // 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)' // has to be checked in a separate condition, otherwise GCC complains // about 'or' being an alternative token -#if defined(_MSC_VER) +#if defined(_MSC_VER)&& !defined(__cplusplus) #ifndef __GCCXML__ #if defined(or) # pragma push_macro("or") @@ -42,7 +42,7 @@ # define BOOST_MPL_PREPROCESSED_HEADER or.hpp # include -#if defined(_MSC_VER) && !defined(__clang__) +#if defined(_MSC_VER) && !defined(__clang__) && !defined(__cplusplus) #ifndef __GCCXML__ #if defined(or) # pragma pop_macro("or") From c73f26cafae165ffc3439d4b006f48620907d21c Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Thu, 11 May 2023 05:16:45 +0200 Subject: [PATCH 02/20] Avoid `Wzero-as-null-pointer-constant` warning (#75) Newer compilers may warn when using `0`, e.g.: ``` ./boost/iterator/detail/facade_iterator_category.hpp:161:5: error: zero as null pointer constant [-Werror,-Wzero-as-null-pointer-constant] BOOST_MPL_ASSERT_NOT((is_iterator_category)); ^ ./boost/mpl/assert.hpp:324:58: note: expanded from macro 'BOOST_MPL_ASSERT_NOT' boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \ ``` --- include/boost/mpl/assert.hpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/boost/mpl/assert.hpp b/include/boost/mpl/assert.hpp index 67700ab3b..c7ecddf02 100644 --- a/include/boost/mpl/assert.hpp +++ b/include/boost/mpl/assert.hpp @@ -297,7 +297,7 @@ BOOST_MPL_AUX_ASSERT_CONSTANT( \ std::size_t \ , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ boost::mpl::assertion_failed( \ - boost::mpl::assert_arg( (void (*) pred)0, 1 ) \ + boost::mpl::assert_arg( (void (*) pred)BOOST_NULLPTR, 1 ) \ ) \ ) \ ) \ @@ -310,7 +310,7 @@ BOOST_MPL_AUX_ASSERT_CONSTANT( \ enum { \ BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ boost::mpl::assertion::failed( \ - boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \ + boost::mpl::assert_not_arg( (void (*) pred)BOOST_NULLPTR, 1 ) \ ) \ ) \ }\ @@ -321,7 +321,7 @@ BOOST_MPL_AUX_ASSERT_CONSTANT( \ std::size_t \ , BOOST_PP_CAT(mpl_assertion_in_line_,BOOST_MPL_AUX_PP_COUNTER()) = sizeof( \ boost::mpl::assertion_failed( \ - boost::mpl::assert_not_arg( (void (*) pred)0, 1 ) \ + boost::mpl::assert_not_arg( (void (*) pred)BOOST_NULLPTR, 1 ) \ ) \ ) \ ) \ From 80a0151fbae031db5913122bb564010417d00197 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 21:06:03 +0300 Subject: [PATCH 03/20] Update ci.yml --- .github/workflows/ci.yml | 97 +++++++++++++++++++--------------------- 1 file changed, 47 insertions(+), 50 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 149887096..3020f89ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,60 +44,56 @@ jobs: matrix: include: # Linux, gcc - - { compiler: gcc-4.4, cxxstd: '98,0x', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: gcc-4.6, cxxstd: '03,0x', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: gcc-4.7, cxxstd: '03,11', os: ubuntu-20.04, container: 'ubuntu:16.04' } - - { compiler: gcc-4.8, cxxstd: '03,11', os: ubuntu-18.04 } - - { compiler: gcc-4.9, cxxstd: '03,11', os: ubuntu-20.04, container: 'ubuntu:16.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-4.4, cxxstd: '98,0x', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.6, cxxstd: '03,0x', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.7, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.8, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-4.9, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-5, cxxstd: '03,11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-6, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-7, cxxstd: '03,11,14,17', os: ubuntu-20.04 } + - { compiler: gcc-8, cxxstd: '03,11,14,17,2a', os: ubuntu-20.04 } + - { compiler: gcc-9, cxxstd: '03,11,14,17,2a', os: ubuntu-20.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-22.04 } + - { compiler: gcc-12, cxxstd: '03,11,14,17,20,2b', os: ubuntu-22.04 } + - { compiler: gcc-13, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:23.04' } + - { compiler: gcc-14, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:24.04' } - { name: GCC w/ sanitizers, sanitize: yes, - compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.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-10, cxxstd: '03,11', os: ubuntu-20.04, install: 'g++-10-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 } - # 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-3.5, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.6, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.7, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.8, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.9, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-4.0, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-5.0, cxxstd: '03,11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-6.0, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-7, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-8, cxxstd: '03,11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-9, cxxstd: '03,11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-10, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-11, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-13, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-14, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-15, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-16, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:23.04' } + - { compiler: clang-17, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:23.10' } + - { compiler: clang-18, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: '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' } - { 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: '03,11,14,17,20', os: ubuntu-latest, container: '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 } - - # Coverity Scan - # requires two github secrets in repo to activate; see ci/github/coverity.sh - # does not run on pull requests, only on pushes into develop and master - - { name: Coverity, coverity: yes, - compiler: clang-10, cxxstd: '17', os: ubuntu-20.04, ccache: no } - - # multiarch (bigendian testing) - does not support coverage yet - # Please uncomment when fixing https://github.com/boostorg/mpl/issues/50 - # - { name: Big-endian, multiarch: yes, - # compiler: clang, cxxstd: '17', os: ubuntu-20.04, ccache: no, distro: fedora, edition: 34, arch: s390x } - + - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-12 } + - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-13 } + - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-14 } timeout-minutes: 120 runs-on: ${{matrix.os}} @@ -246,15 +242,16 @@ jobs: fail-fast: false matrix: include: - - { toolset: msvc-14.2, cxxstd: '14,17,20', addrmd: '32,64', os: windows-2019 } - - { 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.0, cxxstd: '14,latest', addrmd: '32,64', os: windows-2019 } + - { toolset: msvc-14.2, cxxstd: '14,17,20,latest', addrmd: '32,64', os: windows-2019 } + - { toolset: msvc-14.3, cxxstd: '14,17,20,latest', addrmd: '32,64', os: windows-2022 } + - { toolset: clang-win, cxxstd: '14,17,20,latest', addrmd: '32,64', os: windows-2022 } + - { toolset: gcc, cxxstd: '03,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 From 1f0e40bb9221114a0513c3b9949a2fa972ea1b36 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 21:17:39 +0300 Subject: [PATCH 04/20] Disable for_each.cpp under C++03 --- test/Jamfile.v2 | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 5761c6d60..7f63df3e3 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -1,10 +1,7 @@ project : requirements - BOOST_ALL_NO_LIB=1 - all - clang:-Wextra + extra clang:-Wno-variadic-macros - gcc:-Wextra gcc:-Wshadow gcc:-Wno-variadic-macros msvc:_SCL_SECURE_NO_WARNINGS @@ -53,7 +50,7 @@ test-suite mpl : [ compile find.cpp ] [ compile find_if.cpp ] [ compile fold.cpp ] - [ run for_each.cpp ] + [ run for_each.cpp : : : 98:no 03:no ] [ compile front.cpp ] [ compile get_tag_def.cpp ] [ compile has_xxx.cpp ] From 13cf1eaeb53c75343172f9c29e6f004781ef4e35 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 21:18:23 +0300 Subject: [PATCH 05/20] Do not try to install libpython-dev --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3020f89ab..6a78acc51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -113,7 +113,7 @@ jobs: # Need (newer) git 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 + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ python git fi # multiple job types are not compatible with ccache, they use "ccache: no" in the matrix if [[ "${{ matrix.ccache }}" == "no" ]]; then From 3ff60c5633b8c59e8a66f2ea4dff7ae8e1edc949 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 22:25:12 +0300 Subject: [PATCH 06/20] Rewrite ci.yml --- .github/workflows/ci.yml | 827 ++++++++++++++++++++++++++------------- 1 file changed, 555 insertions(+), 272 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6a78acc51..e0e5665b8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,11 +1,3 @@ -# Copyright 2020-2021 Peter Dimov -# Copyright 2021 Andrey Semashev -# Copyright 2021 Alexander Grund -# Copyright 2022 James E. King III -# -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) ---- name: CI on: @@ -14,323 +6,614 @@ on: branches: - master - develop - - bugfix/** - feature/** - - fix/** - - pr/** - -concurrency: - group: ${{format('{0}:{1}', github.repository, github.ref)}} - cancel-in-progress: true env: - ASAN_OPTIONS: allocator_may_return_null=1 - GIT_FETCH_JOBS: 8 - NET_RETRY_COUNT: 5 - B2_CI_VERSION: 1 - B2_VARIANT: debug,release - B2_LINK: shared,static - LCOV_BRANCH_COVERAGE: 0 - CODECOV_NAME: Github Actions + UBSAN_OPTIONS: print_stacktrace=1 jobs: posix: - defaults: - run: - shell: bash - strategy: fail-fast: false matrix: include: - # Linux, gcc - - { compiler: gcc-4.4, cxxstd: '98,0x', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.6, cxxstd: '03,0x', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.7, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-4.8, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: gcc-4.9, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: gcc-5, cxxstd: '03,11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: gcc-6, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: gcc-7, cxxstd: '03,11,14,17', os: ubuntu-20.04 } - - { compiler: gcc-8, cxxstd: '03,11,14,17,2a', os: ubuntu-20.04 } - - { compiler: gcc-9, cxxstd: '03,11,14,17,2a', os: ubuntu-20.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-22.04 } - - { compiler: gcc-12, cxxstd: '03,11,14,17,20,2b', os: ubuntu-22.04 } - - { compiler: gcc-13, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:23.04' } - - { compiler: gcc-14, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:24.04' } - - { name: GCC w/ sanitizers, sanitize: yes, - compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } - - { name: Collect coverage, coverage: yes, - compiler: gcc-10, cxxstd: '03,11', os: ubuntu-20.04, install: 'g++-10-multilib', address-model: '32,64' } - - # Linux, clang - - { compiler: clang-3.5, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.6, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.7, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.8, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } - - { compiler: clang-3.9, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: clang-4.0, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: clang-5.0, cxxstd: '03,11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } - - { compiler: clang-6.0, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-7, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-8, cxxstd: '03,11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-9, cxxstd: '03,11,14,17,2a', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-10, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-11, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04' } - - { compiler: clang-13, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:22.04' } - - { compiler: clang-14, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:22.04' } - - { compiler: clang-15, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:22.04' } - - { compiler: clang-16, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:23.04' } - - { compiler: clang-17, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:23.10' } - - { compiler: clang-18, cxxstd: '03,11,14,17,20,2b', os: ubuntu-latest, container: 'ubuntu:24.04' } - - # libc++ - - { name: Clang w/ sanitizers, sanitize: yes, - compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev' } - - # OSX, clang - - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-12 } - - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-13 } - - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-14 } - - timeout-minutes: 120 + - toolset: gcc-4.8 + cxxstd: "03,11" + container: ubuntu:18.04 + os: ubuntu-latest + install: g++-4.8 + - toolset: gcc-5 + cxxstd: "03,11,14,1z" + container: ubuntu:18.04 + os: ubuntu-latest + install: g++-5 + - toolset: gcc-6 + cxxstd: "03,11,14,1z" + container: ubuntu:18.04 + os: ubuntu-latest + install: g++-6 + - toolset: gcc-7 + cxxstd: "03,11,14,17" + container: ubuntu:18.04 + os: ubuntu-latest + - toolset: gcc-8 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + install: g++-8 + - toolset: gcc-9 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + - toolset: gcc-10 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + install: g++-10 + - toolset: gcc-11 + cxxstd: "03,11,14,17,2a" + os: ubuntu-22.04 + - toolset: gcc-12 + cxxstd: "03,11,14,17,20,2b" + os: ubuntu-22.04 + install: g++-12 + - toolset: gcc-13 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:23.04 + os: ubuntu-latest + install: g++-13 + - toolset: gcc-14 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:24.04 + os: ubuntu-latest + install: g++-14 + - toolset: clang + compiler: clang++-3.9 + cxxstd: "03,11,14" + container: ubuntu:18.04 + os: ubuntu-latest + install: clang-3.9 + - toolset: clang + compiler: clang++-4.0 + cxxstd: "03,11,14" + container: ubuntu:18.04 + os: ubuntu-latest + install: clang-4.0 + - toolset: clang + compiler: clang++-5.0 + cxxstd: "03,11,14,1z" + container: ubuntu:18.04 + os: ubuntu-latest + install: clang-5.0 + - toolset: clang + compiler: clang++-6.0 + cxxstd: "03,11,14,17" + os: ubuntu-20.04 + install: clang-6.0 + - toolset: clang + compiler: clang++-7 + cxxstd: "03,11,14,17" + os: ubuntu-20.04 + install: clang-7 + - toolset: clang + compiler: clang++-8 + cxxstd: "03,11,14,17" + os: ubuntu-20.04 + install: clang-8 + - toolset: clang + compiler: clang++-9 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + install: clang-9 + - toolset: clang + compiler: clang++-10 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + install: clang-10 + - toolset: clang + compiler: clang++-11 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + install: clang-11 + - toolset: clang + compiler: clang++-12 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + install: clang-12 + - toolset: clang + compiler: clang++-13 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:22.04 + os: ubuntu-latest + install: clang-13 + - toolset: clang + compiler: clang++-14 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:22.04 + os: ubuntu-latest + install: clang-14 + - toolset: clang + compiler: clang++-15 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:22.04 + os: ubuntu-latest + install: clang-15 + - toolset: clang + compiler: clang++-16 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:23.04 + os: ubuntu-latest + install: clang-16 + - toolset: clang + compiler: clang++-17 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:23.10 + os: ubuntu-latest + install: clang-17 + - toolset: clang + compiler: clang++-18 + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:24.04 + os: ubuntu-latest + install: clang-18 + - toolset: clang + cxxstd: "03,11,14,17,20,2b" + os: macos-12 + - toolset: clang + cxxstd: "03,11,14,17,20,2b" + os: macos-13 + - toolset: clang + cxxstd: "03,11,14,17,20,2b" + os: macos-14 + runs-on: ${{matrix.os}} container: ${{matrix.container}} - env: {B2_USE_CCACHE: 1} - steps: - - name: Setup environment - run: | - if [ -f "/etc/debian_version" ]; then - echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV - export DEBIAN_FRONTEND=noninteractive - 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 - 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 git - fi - # multiple job types are not compatible with ccache, they 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 + defaults: + run: + shell: bash + steps: - uses: actions/checkout@v3 - 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 - 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}} - - - name: Fetch Boost.CI - uses: actions/checkout@v3 - 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 container environment + if: matrix.container + run: | + apt-get update + apt-get -y install sudo python3 git g++ - name: Install packages - if: startsWith(matrix.os, 'ubuntu') - run: | - SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) - SOURCES=(${{join(matrix.sources, ' ')}}) - # Add this by default - 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 - sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update - if [[ -z "${{matrix.install}}" ]]; then - pkgs="${{matrix.compiler}}" - pkgs="${pkgs/gcc-/g++-}" - else - pkgs="${{matrix.install}}" - fi - sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs - - - name: Setup GCC Toolchain - if: matrix.gcc_toolchain - run: | - GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" - echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV - MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" - mkdir -p "$GCC_TOOLCHAIN_ROOT" - ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" - ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" - mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" - ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" - - - 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} + if: matrix.install + run: | + sudo apt-get update + sudo apt-get -y install ${{matrix.install}} - name: Setup Boost - env: - B2_ADDRESS_MODEL: ${{matrix.address-model}} - B2_COMPILER: ${{matrix.compiler}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_SANITIZE: ${{matrix.sanitize}} - B2_STDLIB: ${{matrix.stdlib}} - run: source ci/github/install.sh - - - name: Setup coverage collection - if: matrix.coverage - run: ci/github/codecov.sh "setup" + run: | + echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY + LIBRARY=${GITHUB_REPOSITORY#*/} + echo LIBRARY: $LIBRARY + echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV + echo GITHUB_BASE_REF: $GITHUB_BASE_REF + echo GITHUB_REF: $GITHUB_REF + REF=${GITHUB_BASE_REF:-$GITHUB_REF} + REF=${REF#refs/heads/} + echo REF: $REF + BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true + echo BOOST_BRANCH: $BOOST_BRANCH + cd .. + git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + git submodule update --init tools/boostdep + python3 tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY + ./bootstrap.sh + ./b2 -d0 headers + + - name: Create user-config.jam + if: matrix.compiler + run: | + echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam - name: Run tests - if: '!matrix.coverity' - run: ci/build.sh + run: | + cd ../boost-root + ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release - - name: Upload coverage - if: matrix.coverage - run: ci/codecov.sh "upload" + windows: + strategy: + 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,latest" + addrmd: 32,64 + os: windows-2019 + - toolset: msvc-14.3 + cxxstd: "14,17,20,latest" + addrmd: 32,64 + os: windows-2022 + - toolset: clang-win + cxxstd: "14,17,20,latest" + addrmd: 32,64 + os: windows-2022 + - toolset: gcc + cxxstd: "03,11,14,17,2a" + addrmd: 64 + os: windows-2019 - - name: Run coverity - if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') - run: ci/github/coverity.sh - env: - COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} - COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + runs-on: ${{matrix.os}} - windows: - defaults: - run: + steps: + - uses: actions/checkout@v4 + + - name: Setup Boost + shell: cmd + run: | + echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% + for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi + echo LIBRARY: %LIBRARY% + echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% + echo GITHUB_BASE_REF: %GITHUB_BASE_REF% + echo GITHUB_REF: %GITHUB_REF% + if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% + set BOOST_BRANCH=develop + for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master + echo BOOST_BRANCH: %BOOST_BRANCH% + cd .. + git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% + cmd /c bootstrap + b2 -d0 headers + + - name: Run tests shell: cmd + run: | + cd ../boost-root + b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release embed-manifest-via=linker + + posix-cmake-subdir: strategy: 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,latest', addrmd: '32,64', os: windows-2019 } - - { toolset: msvc-14.3, cxxstd: '14,17,20,latest', addrmd: '32,64', os: windows-2022 } - - { toolset: clang-win, cxxstd: '14,17,20,latest', addrmd: '32,64', os: windows-2022 } - - { toolset: gcc, cxxstd: '03,11,14,17,2a', addrmd: '64', os: windows-2019 } + - os: ubuntu-20.04 + - os: ubuntu-22.04 + - os: macos-12 + - os: macos-13 + - os: macos-14 runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - - name: Fetch Boost.CI - uses: actions/checkout@v2 - with: - repository: boostorg/boost-ci - ref: master - path: boost-ci-cloned - - name: Get CI scripts folder + - name: Install packages + if: matrix.install + run: sudo apt install ${{matrix.install}} + + - name: Setup Boost + run: | + echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY + LIBRARY=${GITHUB_REPOSITORY#*/} + echo LIBRARY: $LIBRARY + echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV + echo GITHUB_BASE_REF: $GITHUB_BASE_REF + echo GITHUB_REF: $GITHUB_REF + REF=${GITHUB_BASE_REF:-$GITHUB_REF} + REF=${REF#refs/heads/} + echo REF: $REF + BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true + echo BOOST_BRANCH: $BOOST_BRANCH + cd .. + git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY + + - name: Use library with add_subdirectory run: | - REM Copy ci folder if not testing Boost.CI - if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci - rmdir /s /q boost-ci-cloned + cd ../boost-root/libs/$LIBRARY/test/cmake_subdir_test + mkdir __build__ && cd __build__ + cmake .. + cmake --build . + ctest --output-on-failure --no-tests=error + + posix-cmake-install: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + - os: ubuntu-22.04 + - os: macos-12 + - os: macos-13 + - os: macos-14 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 + + - name: Install packages + if: matrix.install + run: sudo apt install ${{matrix.install}} - name: Setup Boost - run: ci\github\install.bat + run: | + echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY + LIBRARY=${GITHUB_REPOSITORY#*/} + echo LIBRARY: $LIBRARY + echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV + echo GITHUB_BASE_REF: $GITHUB_BASE_REF + echo GITHUB_REF: $GITHUB_REF + REF=${GITHUB_BASE_REF:-$GITHUB_REF} + REF=${REF#refs/heads/} + echo REF: $REF + BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true + echo BOOST_BRANCH: $BOOST_BRANCH + cd .. + git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY + + - name: Configure + run: | + cd ../boost-root + mkdir __build__ && cd __build__ + cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DCMAKE_INSTALL_PREFIX=~/.local .. + + - name: Install + run: | + cd ../boost-root/__build__ + cmake --build . --target install + + - name: Use the installed library + run: | + cd ../boost-root/libs/$LIBRARY/test/cmake_install_test && mkdir __build__ && cd __build__ + cmake -DCMAKE_INSTALL_PREFIX=~/.local .. + cmake --build . + ctest --output-on-failure --no-tests=error + + posix-cmake-test: + strategy: + fail-fast: false + matrix: + include: + - os: ubuntu-20.04 + - os: ubuntu-22.04 + - os: macos-12 + - os: macos-13 + - os: macos-14 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 + + - name: Install packages + if: matrix.install + run: sudo apt install ${{matrix.install}} + + - name: Setup Boost + run: | + echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY + LIBRARY=${GITHUB_REPOSITORY#*/} + echo LIBRARY: $LIBRARY + echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV + echo GITHUB_BASE_REF: $GITHUB_BASE_REF + echo GITHUB_REF: $GITHUB_REF + REF=${GITHUB_BASE_REF:-$GITHUB_REF} + REF=${REF#refs/heads/} + echo REF: $REF + BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true + echo BOOST_BRANCH: $BOOST_BRANCH + cd .. + git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY + + - name: Configure + run: | + cd ../boost-root + mkdir __build__ && cd __build__ + cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DBUILD_TESTING=ON .. + + - name: Build tests + run: | + cd ../boost-root/__build__ + cmake --build . --target tests - name: Run tests - if: '!matrix.coverage' - run: ci\build.bat - env: - B2_TOOLSET: ${{matrix.toolset}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_ADDRESS_MODEL: ${{matrix.addrmd}} - - - name: Collect coverage - shell: powershell - if: matrix.coverage - run: ci\opencppcoverage.ps1 - env: - B2_TOOLSET: ${{matrix.toolset}} - B2_CXXSTD: ${{matrix.cxxstd}} - B2_ADDRESS_MODEL: ${{matrix.addrmd}} - - - name: Upload coverage - if: matrix.coverage - uses: codecov/codecov-action@v2 - with: - files: __out/cobertura.xml - - CMake: - defaults: - run: - shell: bash + run: | + cd ../boost-root/__build__ + ctest --output-on-failure --no-tests=error + windows-cmake-subdir: strategy: fail-fast: false matrix: include: - - { os: ubuntu-20.04, build_shared: ON, build_type: Release, 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: OFF, build_type: Debug, generator: 'Visual Studio 16 2019' } + - os: windows-2019 + - os: windows-2022 - timeout-minutes: 120 runs-on: ${{matrix.os}} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - name: Fetch Boost.CI - uses: actions/checkout@v2 - with: - repository: boostorg/boost-ci - ref: master - path: boost-ci-cloned + - name: Setup Boost + shell: cmd + run: | + echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% + for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi + echo LIBRARY: %LIBRARY% + echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% + echo GITHUB_BASE_REF: %GITHUB_BASE_REF% + echo GITHUB_REF: %GITHUB_REF% + if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% + set BOOST_BRANCH=develop + for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master + echo BOOST_BRANCH: %BOOST_BRANCH% + cd .. + git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% + + - name: Use library with add_subdirectory (Debug) + shell: cmd + run: | + cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test + mkdir __build__ && cd __build__ + cmake .. + cmake --build . --config Debug + ctest --output-on-failure --no-tests=error -C Debug - - name: Get CI scripts folder + - name: Use library with add_subdirectory (Release) + shell: cmd run: | - # Copy ci folder if not testing Boost.CI - [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . - rm -rf boost-ci-cloned + cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test/__build__ + cmake --build . --config Release + ctest --output-on-failure --no-tests=error -C Release + + windows-cmake-install: + strategy: + fail-fast: false + matrix: + include: + - os: windows-2019 + - os: windows-2022 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 - name: Setup Boost - env: {B2_DONT_BOOTSTRAP: 1} - run: source ci/github/install.sh + shell: cmd + run: | + echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% + for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi + echo LIBRARY: %LIBRARY% + echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% + echo GITHUB_BASE_REF: %GITHUB_BASE_REF% + echo GITHUB_REF: %GITHUB_REF% + if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% + set BOOST_BRANCH=develop + for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master + echo BOOST_BRANCH: %BOOST_BRANCH% + cd .. + git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% + + - name: Configure + shell: cmd + run: | + cd ../boost-root + mkdir __build__ && cd __build__ + cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix .. - - name: Run CMake + - name: Install (Debug) + shell: cmd + run: | + cd ../boost-root/__build__ + cmake --build . --target install --config Debug + + - name: Install (Release) + shell: cmd + run: | + cd ../boost-root/__build__ + cmake --build . --target install --config Release + + - name: Use the installed library (Debug) + shell: cmd + run: | + cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test && mkdir __build__ && cd __build__ + cmake -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix .. + cmake --build . --config Debug + ctest --output-on-failure --no-tests=error -C Debug + + - name: Use the installed library (Release) + shell: cmd + run: | + cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test/__build__ + cmake --build . --config Release + ctest --output-on-failure --no-tests=error -C Release + + windows-cmake-test: + strategy: + fail-fast: false + matrix: + include: + - os: windows-2019 + - os: windows-2022 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 + + - name: Setup Boost + shell: cmd + run: | + echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% + for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi + echo LIBRARY: %LIBRARY% + echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% + echo GITHUB_BASE_REF: %GITHUB_BASE_REF% + echo GITHUB_REF: %GITHUB_REF% + if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% + set BOOST_BRANCH=develop + for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master + echo BOOST_BRANCH: %BOOST_BRANCH% + cd .. + git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% + + - name: Configure + shell: cmd + run: | + cd ../boost-root + mkdir __build__ && cd __build__ + cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DBUILD_TESTING=ON .. + + - name: Build tests (Debug) + shell: cmd + run: | + cd ../boost-root/__build__ + cmake --build . --target tests --config Debug + + - name: Run tests (Debug) + shell: cmd + run: | + cd ../boost-root/__build__ + ctest --output-on-failure --no-tests=error -C Debug + + - name: Build tests (Release) + shell: cmd + run: | + cd ../boost-root/__build__ + cmake --build . --target tests --config Release + + - name: Run tests (Release) + shell: cmd 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}} + cd ../boost-root/__build__ + ctest --output-on-failure --no-tests=error -C Release From 8764a9014fd35242e2b05f8fc22ffd9f99815127 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 22:30:26 +0300 Subject: [PATCH 07/20] Regenerate CMakeLists.txt --- CMakeLists.txt | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7df2beeb3..d1db5f5c9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,22 +1,30 @@ -# Copyright 2018 Mike Dev +# Generated by `boostdep --cmake mpl` +# Copyright 2020, 2021 Peter Dimov # Distributed under the Boost Software License, Version 1.0. -# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt +# https://www.boost.org/LICENSE_1_0.txt -cmake_minimum_required( VERSION 3.5...3.20 ) -project( boost_mpl VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX ) +cmake_minimum_required(VERSION 3.5...3.20) -add_library( boost_mpl INTERFACE ) -add_library( Boost::mpl ALIAS boost_mpl ) +project(boost_mpl VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) -target_include_directories( boost_mpl INTERFACE include ) +add_library(boost_mpl INTERFACE) +add_library(Boost::mpl ALIAS boost_mpl) -target_link_libraries( boost_mpl - INTERFACE - Boost::config - Boost::core - Boost::predef - Boost::preprocessor - Boost::static_assert - Boost::type_traits - Boost::utility +target_include_directories(boost_mpl INTERFACE include) + +target_link_libraries(boost_mpl + INTERFACE + Boost::config + Boost::core + Boost::predef + Boost::preprocessor + Boost::static_assert + Boost::type_traits + Boost::utility ) + +if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt") + + add_subdirectory(test) + +endif() From b30f4864cdf2d503072b351ba1f533951c68cba4 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 22:32:45 +0300 Subject: [PATCH 08/20] Update test/Jamfile.v2 --- test/Jamfile.v2 | 198 ++++++++++++++++++++++++------------------------ 1 file changed, 98 insertions(+), 100 deletions(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 7f63df3e3..39bd416d8 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -11,104 +11,102 @@ import common ; import os ; import testing ; -test-suite mpl : - - [ compile aux_/increased_arity.cpp ] - [ compile aux_/largest_int.cpp ] - [ compile aux_/msvc_is_class.cpp ] - [ compile aux_/template_arity.cpp ] - [ compile aux_/preprocessor/is_seq.cpp ] - [ compile aux_/preprocessor/token_equal.cpp ] - - [ compile advance.cpp ] - [ compile always.cpp ] - [ compile apply.cpp ] - [ compile apply_wrap.cpp ] - [ compile arithmetic.cpp ] - [ compile as_sequence.cpp ] - [ compile assert.cpp ] - # link assert_vc8_p1.cpp assert_vc8_p2.cpp - [ compile at.cpp ] - [ compile back.cpp ] - [ compile bind.cpp ] - [ compile bitwise.cpp ] - [ run bool.cpp ] - [ compile comparison.cpp ] - [ compile contains.cpp ] - [ compile copy.cpp ] - [ compile copy_if.cpp ] - [ compile count.cpp ] - [ compile count_if.cpp ] - [ compile deque.cpp ] - [ compile distance.cpp ] - [ compile empty.cpp ] - [ compile equal.cpp ] - [ compile erase.cpp ] - [ compile erase_range.cpp ] - [ compile eval_if.cpp ] - [ compile filter_view.cpp ] - [ compile find.cpp ] - [ compile find_if.cpp ] - [ compile fold.cpp ] - [ run for_each.cpp : : : 98:no 03:no ] - [ compile front.cpp ] - [ compile get_tag_def.cpp ] - [ compile has_xxx.cpp ] - [ compile identity.cpp ] - [ compile if.cpp ] - [ compile index_of.cpp ] - [ compile inherit.cpp ] - [ compile insert.cpp ] - [ compile insert_range.cpp ] - [ run int.cpp ] - [ run char.cpp ] - [ run integral_c.cpp : : : vacpp:-qchars=signed ] - [ compile is_placeholder.cpp ] - [ compile is_sequence.cpp ] - [ compile iterator_tags.cpp ] - [ compile joint_view.cpp ] - [ compile lambda.cpp ] - [ compile lambda_args.cpp ] - [ compile list.cpp ] - [ compile list_c.cpp ] - [ compile logical.cpp ] - [ compile lower_bound.cpp ] - [ compile map.cpp ] - [ compile max_element.cpp ] - [ compile min_max.cpp ] - [ compile multiset.cpp ] - [ compile next.cpp ] - [ compile no_has_xxx.cpp ] - [ compile numeric_ops.cpp ] - [ compile pair_view.cpp ] - [ compile partition.cpp ] - [ compile pop_front.cpp ] - [ compile push_back.cpp ] - [ compile push_front.cpp ] - [ compile quote.cpp ] - [ compile range_c.cpp ] - [ compile remove.cpp ] - [ compile remove_if.cpp ] - [ compile replace.cpp ] - [ compile replace_if.cpp ] - [ compile reverse.cpp ] - [ compile same_as.cpp ] - [ compile set.cpp ] - [ compile set_c.cpp ] - [ compile single_view.cpp ] - [ compile size.cpp ] - [ run size_t.cpp ] - [ compile sizeof.cpp ] - [ compile sort.cpp ] - [ compile stable_partition.cpp ] - [ compile transform.cpp ] - [ compile transform_view.cpp ] - [ compile unique.cpp ] - [ compile unpack_args.cpp ] - [ compile upper_bound.cpp ] - [ compile vector.cpp ] - [ compile vector_c.cpp ] - [ compile zip_view.cpp ] - [ run string.cpp ] - ; +compile aux_/increased_arity.cpp ; +compile aux_/largest_int.cpp ; +compile aux_/msvc_is_class.cpp ; +compile aux_/template_arity.cpp ; +compile aux_/preprocessor/is_seq.cpp ; +compile aux_/preprocessor/token_equal.cpp ; +compile advance.cpp ; +compile always.cpp ; +compile apply.cpp ; +compile apply_wrap.cpp ; +compile arithmetic.cpp ; +compile as_sequence.cpp ; +compile assert.cpp ; +# link assert_vc8_p1.cpp assert_vc8_p2.cpp +compile at.cpp ; +compile back.cpp ; +compile bind.cpp ; +compile bitwise.cpp ; +run bool.cpp ; +compile comparison.cpp ; +compile contains.cpp ; +compile copy.cpp ; +compile copy_if.cpp ; +compile count.cpp ; +compile count_if.cpp ; +compile deque.cpp ; +compile distance.cpp ; +compile empty.cpp ; +compile equal.cpp ; +compile erase.cpp ; +compile erase_range.cpp ; +compile eval_if.cpp ; +compile filter_view.cpp ; +compile find.cpp ; +compile find_if.cpp ; +compile fold.cpp ; +run for_each.cpp + : : : 98:no 03:no ; +compile front.cpp ; +compile get_tag_def.cpp ; +compile has_xxx.cpp ; +compile identity.cpp ; +compile if.cpp ; +compile index_of.cpp ; +compile inherit.cpp ; +compile insert.cpp ; +compile insert_range.cpp ; +run int.cpp ; +run char.cpp ; +run integral_c.cpp + : : : vacpp:-qchars=signed ; +compile is_placeholder.cpp ; +compile is_sequence.cpp ; +compile iterator_tags.cpp ; +compile joint_view.cpp ; +compile lambda.cpp ; +compile lambda_args.cpp ; +compile list.cpp ; +compile list_c.cpp ; +compile logical.cpp ; +compile lower_bound.cpp ; +compile map.cpp ; +compile max_element.cpp ; +compile min_max.cpp ; +compile multiset.cpp ; +compile next.cpp ; +compile no_has_xxx.cpp ; +compile numeric_ops.cpp ; +compile pair_view.cpp ; +compile partition.cpp ; +compile pop_front.cpp ; +compile push_back.cpp ; +compile push_front.cpp ; +compile quote.cpp ; +compile range_c.cpp ; +compile remove.cpp ; +compile remove_if.cpp ; +compile replace.cpp ; +compile replace_if.cpp ; +compile reverse.cpp ; +compile same_as.cpp ; +compile set.cpp ; +compile set_c.cpp ; +compile single_view.cpp ; +compile size.cpp ; +run size_t.cpp ; +compile sizeof.cpp ; +compile sort.cpp ; +compile stable_partition.cpp ; +compile transform.cpp ; +compile transform_view.cpp ; +compile unique.cpp ; +compile unpack_args.cpp ; +compile upper_bound.cpp ; +compile vector.cpp ; +compile vector_c.cpp ; +compile zip_view.cpp ; +run string.cpp ; From 355c2d4cd06893a2cfcabd4bae2fc062d9f929cd Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 22:41:25 +0300 Subject: [PATCH 09/20] Add test/CMakeLists.txt --- test/CMakeLists.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 test/CMakeLists.txt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 000000000..9272791cc --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,11 @@ +# Copyright 2018, 2019 Peter Dimov +# 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 + +include(BoostTestJamfile OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST) + +if(HAVE_BOOST_TEST) + +boost_test_jamfile(FILE Jamfile.v2 LINK_LIBRARIES Boost::mpl Boost::bind) + +endif() From 46bf2eede31b2a67f3499b4b3db9e2efc061805e Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Mon, 17 Jun 2024 22:50:05 +0300 Subject: [PATCH 10/20] Add cmake_install_test, cmake_subdir_test --- test/cmake_install_test/CMakeLists.txt | 17 ++++++++++++++++ test/cmake_install_test/main.cpp | 10 +++++++++ test/cmake_subdir_test/CMakeLists.txt | 28 ++++++++++++++++++++++++++ test/cmake_subdir_test/main.cpp | 10 +++++++++ 4 files changed, 65 insertions(+) create mode 100644 test/cmake_install_test/CMakeLists.txt create mode 100644 test/cmake_install_test/main.cpp create mode 100644 test/cmake_subdir_test/CMakeLists.txt create mode 100644 test/cmake_subdir_test/main.cpp diff --git a/test/cmake_install_test/CMakeLists.txt b/test/cmake_install_test/CMakeLists.txt new file mode 100644 index 000000000..5a40d62b1 --- /dev/null +++ b/test/cmake_install_test/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright 2018 Peter Dimov +# 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 + +cmake_minimum_required(VERSION 3.5...3.16) + +project(cmake_install_test LANGUAGES CXX) + +find_package(boost_mpl REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main Boost::mpl) + +enable_testing() +add_test(NAME main COMMAND main) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/cmake_install_test/main.cpp b/test/cmake_install_test/main.cpp new file mode 100644 index 000000000..64c4a6bd4 --- /dev/null +++ b/test/cmake_install_test/main.cpp @@ -0,0 +1,10 @@ +// Copyright 2024 Peter Dimov +// 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 + +#include + +int main() +{ + BOOST_MPL_ASSERT_RELATION( 1, <, 5 ); +} diff --git a/test/cmake_subdir_test/CMakeLists.txt b/test/cmake_subdir_test/CMakeLists.txt new file mode 100644 index 000000000..4c3771c9b --- /dev/null +++ b/test/cmake_subdir_test/CMakeLists.txt @@ -0,0 +1,28 @@ +# Copyright 2018 Peter Dimov +# 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 + +cmake_minimum_required(VERSION 3.5...3.16) + +project(cmake_subdir_test LANGUAGES CXX) + +add_subdirectory(../.. boostorg/mpl) + +add_subdirectory(../../../assert boostorg/assert) +add_subdirectory(../../../config boostorg/config) +add_subdirectory(../../../core boostorg/core) +add_subdirectory(../../../io boostorg/io) +add_subdirectory(../../../predef boostorg/predef) +add_subdirectory(../../../preprocessor boostorg/preprocessor) +add_subdirectory(../../../static_assert boostorg/static_assert) +add_subdirectory(../../../throw_exception boostorg/throw_exception) +add_subdirectory(../../../type_traits boostorg/type_traits) +add_subdirectory(../../../utility boostorg/utility) + +add_executable(main main.cpp) +target_link_libraries(main Boost::mpl) + +enable_testing() +add_test(NAME main COMMAND main) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/cmake_subdir_test/main.cpp b/test/cmake_subdir_test/main.cpp new file mode 100644 index 000000000..64c4a6bd4 --- /dev/null +++ b/test/cmake_subdir_test/main.cpp @@ -0,0 +1,10 @@ +// Copyright 2024 Peter Dimov +// 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 + +#include + +int main() +{ + BOOST_MPL_ASSERT_RELATION( 1, <, 5 ); +} From d95bae3b143ddc8c02956089e8a27139fbdc4b34 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 18 Jun 2024 02:23:56 +0300 Subject: [PATCH 11/20] Add test for issue #69 --- test/Jamfile.v2 | 2 ++ test/issue_69.cpp | 13 +++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 test/issue_69.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 39bd416d8..1fef348d2 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -110,3 +110,5 @@ compile vector.cpp ; compile vector_c.cpp ; compile zip_view.cpp ; run string.cpp ; + +run issue_69.cpp ; diff --git a/test/issue_69.cpp b/test/issue_69.cpp new file mode 100644 index 000000000..77d52e448 --- /dev/null +++ b/test/issue_69.cpp @@ -0,0 +1,13 @@ +// Copyright 2024 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include + +enum test { zero, one }; + +int main() +{ + boost::mpl::integral_c m; + return m.value; +} From 157204a31efc9652632654f33f5be22f85b56296 Mon Sep 17 00:00:00 2001 From: Ed Catmur Date: Fri, 24 Nov 2023 08:53:05 -0700 Subject: [PATCH 12/20] Use static const for next/prior from C++17 Trying to form next/prior in constant evaluation may be ill-formed; see https://github.com/boostorg/mpl/issues/69 --- include/boost/mpl/aux_/integral_wrapper.hpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/include/boost/mpl/aux_/integral_wrapper.hpp b/include/boost/mpl/aux_/integral_wrapper.hpp index 8748fbb93..661aa3073 100644 --- a/include/boost/mpl/aux_/integral_wrapper.hpp +++ b/include/boost/mpl/aux_/integral_wrapper.hpp @@ -56,7 +56,8 @@ struct AUX_WRAPPER_NAME // have to #ifdef here: some compilers don't like the 'N + 1' form (MSVC), // while some other don't like 'value + 1' (Borland), and some don't like // either -#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) +#if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \ + || __cplusplus >= 201703L private: BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1))); BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1))); From 405833287e242a191f51dcdef1998a5ee2262fe9 Mon Sep 17 00:00:00 2001 From: Ed Catmur Date: Mon, 27 Nov 2023 09:55:00 -0600 Subject: [PATCH 13/20] Update integral_wrapper.hpp Apply change since C++11 --- include/boost/mpl/aux_/integral_wrapper.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/boost/mpl/aux_/integral_wrapper.hpp b/include/boost/mpl/aux_/integral_wrapper.hpp index 661aa3073..5f24b7949 100644 --- a/include/boost/mpl/aux_/integral_wrapper.hpp +++ b/include/boost/mpl/aux_/integral_wrapper.hpp @@ -57,7 +57,7 @@ struct AUX_WRAPPER_NAME // while some other don't like 'value + 1' (Borland), and some don't like // either #if BOOST_WORKAROUND(__EDG_VERSION__, <= 243) \ - || __cplusplus >= 201703L + || __cplusplus >= 201103L private: BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, next_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N + 1))); BOOST_STATIC_CONSTANT(AUX_WRAPPER_VALUE_TYPE, prior_value = BOOST_MPL_AUX_STATIC_CAST(AUX_WRAPPER_VALUE_TYPE, (N - 1))); From 56a7da4d5d7975435754f1b95637096a20cfc030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Ferdinand=20Rivera=20Morell?= Date: Sat, 30 Nov 2024 16:11:24 -0600 Subject: [PATCH 14/20] Add support for modular build structure. (#79) * Make the library modular usable. * Switch to library requirements instead of source. As source puts extra source in install targets. * Add requires-b2 check to top-level build file. * Bump B2 require to 5.2 * Change all references to . * Update copyright dates. * Move inter-lib dependencies to a project variable and into the build targets. * Update build deps. --- Jamfile | 11 ----------- build.jam | 29 +++++++++++++++++++++++++++++ example/Jamfile.v2 | 4 +++- test/Jamfile.v2 | 4 +++- 4 files changed, 35 insertions(+), 13 deletions(-) delete mode 100644 Jamfile create mode 100644 build.jam diff --git a/Jamfile b/Jamfile deleted file mode 100644 index ba92b48d4..000000000 --- a/Jamfile +++ /dev/null @@ -1,11 +0,0 @@ -# Boost.MPL 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 000000000..f0a2e1fbb --- /dev/null +++ b/build.jam @@ -0,0 +1,29 @@ +# 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) + +require-b2 5.2 ; + +constant boost_dependencies : + /boost/config//boost_config + /boost/core//boost_core + /boost/predef//boost_predef + /boost/preprocessor//boost_preprocessor + /boost/static_assert//boost_static_assert + /boost/type_traits//boost_type_traits + /boost/utility//boost_utility ; + +project /boost/mpl + : common-requirements + include + ; + +explicit + [ alias boost_mpl : : : : $(boost_dependencies) ] + [ alias all : boost_mpl example test ] + ; + +call-if : boost-library mpl + ; + diff --git a/example/Jamfile.v2 b/example/Jamfile.v2 index ec2dc761d..7c0203ccf 100644 --- a/example/Jamfile.v2 +++ b/example/Jamfile.v2 @@ -7,9 +7,11 @@ import testing ; +project : requirements /boost/mpl//boost_mpl ; + test-suite "mpl-examples" : [ run inherit_linearly.cpp ] [ compile integer.cpp ] - [ run tuple_from_list.cpp ] + [ run tuple_from_list.cpp : : : /boost/tuple//boost_tuple ] ; diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 1fef348d2..66ed440d8 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -1,5 +1,6 @@ project : requirements + /boost/mpl//boost_mpl extra clang:-Wno-variadic-macros gcc:-Wshadow @@ -49,7 +50,8 @@ compile find.cpp ; compile find_if.cpp ; compile fold.cpp ; run for_each.cpp - : : : 98:no 03:no ; + : : : 98:no 03:no + /boost/bind//boost_bind ; compile front.cpp ; compile get_tag_def.cpp ; compile has_xxx.cpp ; From 00a412d728c1a36f367a615594b23604cb32ca70 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Thu, 2 Jan 2025 16:05:45 +0200 Subject: [PATCH 15/20] Update ci.yml --- .github/workflows/ci.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0e5665b8..e08e40b28 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -56,7 +56,7 @@ jobs: install: g++-12 - toolset: gcc-13 cxxstd: "03,11,14,17,20,2b" - container: ubuntu:23.04 + container: ubuntu:24.04 os: ubuntu-latest install: g++-13 - toolset: gcc-14 @@ -138,13 +138,13 @@ jobs: - toolset: clang compiler: clang++-16 cxxstd: "03,11,14,17,20,2b" - container: ubuntu:23.04 + container: ubuntu:24.04 os: ubuntu-latest install: clang-16 - toolset: clang compiler: clang++-17 cxxstd: "03,11,14,17,20,2b" - container: ubuntu:23.10 + container: ubuntu:24.04 os: ubuntu-latest install: clang-17 - toolset: clang @@ -153,15 +153,15 @@ jobs: container: ubuntu:24.04 os: ubuntu-latest install: clang-18 - - toolset: clang - cxxstd: "03,11,14,17,20,2b" - os: macos-12 - toolset: clang cxxstd: "03,11,14,17,20,2b" os: macos-13 - toolset: clang cxxstd: "03,11,14,17,20,2b" os: macos-14 + - toolset: clang + cxxstd: "03,11,14,17,20,2b" + os: macos-15 runs-on: ${{matrix.os}} container: ${{matrix.container}} @@ -283,9 +283,10 @@ jobs: include: - os: ubuntu-20.04 - os: ubuntu-22.04 - - os: macos-12 + - os: ubuntu-24.04 - os: macos-13 - os: macos-14 + - os: macos-15 runs-on: ${{matrix.os}} @@ -331,9 +332,10 @@ jobs: include: - os: ubuntu-20.04 - os: ubuntu-22.04 - - os: macos-12 + - os: ubuntu-24.04 - os: macos-13 - os: macos-14 + - os: macos-15 runs-on: ${{matrix.os}} @@ -389,9 +391,10 @@ jobs: include: - os: ubuntu-20.04 - os: ubuntu-22.04 - - os: macos-12 + - os: ubuntu-24.04 - os: macos-13 - os: macos-14 + - os: macos-15 runs-on: ${{matrix.os}} From 999eba0da3c6f20ed1dd65c33e66a410536e6698 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Thu, 2 Jan 2025 16:06:34 +0200 Subject: [PATCH 16/20] Apply Node20 workaround --- .github/workflows/ci.yml | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e08e40b28..afa93f751 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -164,20 +164,32 @@ jobs: os: macos-15 runs-on: ${{matrix.os}} - container: ${{matrix.container}} + + container: + image: ${{matrix.container}} + volumes: + - /node20217:/node20217:rw,rshared + - ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }} defaults: run: shell: bash steps: - - uses: actions/checkout@v3 - - name: Setup container environment if: matrix.container run: | apt-get update - apt-get -y install sudo python3 git g++ + apt-get -y install sudo python3 git g++ curl xz-utils + + - name: Install nodejs20glibc2.17 + if: ${{ startsWith( matrix.container, 'ubuntu:1' ) }} + run: | + curl -LO https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz + tar -xf node-v20.9.0-linux-x64-glibc-217.tar.xz --strip-components 1 -C /node20217 + ldd /__e/node20/bin/node + + - uses: actions/checkout@v4 - name: Install packages if: matrix.install From 13fee6a143ab379656621b8cee05903f58b913aa Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Thu, 2 Jan 2025 16:33:25 +0200 Subject: [PATCH 17/20] Add a CI job testing -funsigned-char --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afa93f751..7a17e9f75 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,6 +64,11 @@ jobs: container: ubuntu:24.04 os: ubuntu-latest install: g++-14 + - toolset: gcc + cxxflags: -funsigned-char + cxxstd: "03,11,14,17,20,2b" + container: ubuntu:24.04 + os: ubuntu-latest - toolset: clang compiler: clang++-3.9 cxxstd: "03,11,14" @@ -227,7 +232,7 @@ jobs: - name: Run tests run: | cd ../boost-root - ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release + ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} cxxflags=${{matrix.cxxflags}} variant=debug,release windows: strategy: From d6e20296dca4768d9be83af623c01e2b09983999 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Thu, 2 Jan 2025 16:43:59 +0200 Subject: [PATCH 18/20] Work around warnings in char.cpp and integral_c.cpp when char is unsigned. Fixes #50. --- test/char.cpp | 5 +++++ test/integral_c.cpp | 11 ++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/test/char.cpp b/test/char.cpp index 39f61e730..a52e236c5 100644 --- a/test/char.cpp +++ b/test/char.cpp @@ -13,12 +13,17 @@ #include #include +#include #include "integral_wrapper_test.hpp" MPL_TEST_CASE() { +#if CHAR_MAX > 0 +# define WRAPPER(T, i) char_(i)> +#else # define WRAPPER(T, i) char_ +#endif BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, char) } diff --git a/test/integral_c.cpp b/test/integral_c.cpp index a9f9b0c20..7c9c256d7 100644 --- a/test/integral_c.cpp +++ b/test/integral_c.cpp @@ -13,6 +13,7 @@ #include #include +#include #include "integral_wrapper_test.hpp" @@ -21,10 +22,14 @@ MPL_TEST_CASE() { # define WRAPPER(T, i) integral_c -#if !(defined(__APPLE_CC__) && defined(__GNUC__) && (__GNUC__ == 3) && (__GNUC_MINOR__ <= 3)) - BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, char) -#endif BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, short) BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, int) BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, long) + +#if CHAR_MAX > 0 +# undef WRAPPER +# define WRAPPER(T, i) integral_c(i)> +#endif + + BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, char) } From 73a8223c32217908c3856eef448e848298c0a71e Mon Sep 17 00:00:00 2001 From: Jim King Date: Thu, 2 Jan 2025 12:34:24 +0000 Subject: [PATCH 19/20] Update CI to 2024.12 spec, update README --- .appveyor.yml | 30 +- .github/workflows/ci.yml | 936 ++++++++++++++++----------------------- README.md | 19 +- 3 files changed, 392 insertions(+), 593 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 538a8c587..5ed7227af 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -33,6 +33,12 @@ branches: - /fix\/.*/ - /pr\/.*/ +skip_commits: + files: + - LICENSE + - meta/* + - README.md + matrix: fast_finish: false # Adding MAYFAIL to any matrix job allows it to fail but the build stays green: @@ -64,16 +70,6 @@ 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: cygwin (32-bit) APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ADDPATH: C:\cygwin\bin; @@ -88,20 +84,6 @@ environment: B2_CXXSTD: 03,11,14,1z B2_TOOLSET: gcc - - FLAVOR: mingw32 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - B2_ADDRESS_MODEL: 32 - ADDPATH: C:\mingw\bin; - B2_CXXSTD: 03,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_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/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7a17e9f75..b54c05bb8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,11 @@ +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2021 Alexander Grund +# Copyright 2022-2025 James E. King III +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) +--- name: CI on: @@ -6,634 +14,442 @@ on: branches: - master - develop + - bugfix/** - feature/** + - fix/** + - pr/** + paths-ignore: + - LICENSE + - meta/** + - README.md + +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true env: UBSAN_OPTIONS: print_stacktrace=1 + GIT_FETCH_JOBS: 8 + NET_RETRY_COUNT: 5 + B2_CI_VERSION: 1 + B2_VARIANT: debug,release + B2_LINK: shared,static + LCOV_BRANCH_COVERAGE: 1 jobs: posix: + defaults: + run: + shell: bash + strategy: fail-fast: false matrix: include: - - toolset: gcc-4.8 - cxxstd: "03,11" - container: ubuntu:18.04 - os: ubuntu-latest - install: g++-4.8 - - toolset: gcc-5 - cxxstd: "03,11,14,1z" - container: ubuntu:18.04 - os: ubuntu-latest - install: g++-5 - - toolset: gcc-6 - cxxstd: "03,11,14,1z" - container: ubuntu:18.04 - os: ubuntu-latest - install: g++-6 - - toolset: gcc-7 - cxxstd: "03,11,14,17" - container: ubuntu:18.04 - os: ubuntu-latest - - toolset: gcc-8 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - install: g++-8 - - toolset: gcc-9 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - - toolset: gcc-10 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - install: g++-10 - - toolset: gcc-11 - cxxstd: "03,11,14,17,2a" - os: ubuntu-22.04 - - toolset: gcc-12 - cxxstd: "03,11,14,17,20,2b" - os: ubuntu-22.04 - install: g++-12 - - toolset: gcc-13 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:24.04 - os: ubuntu-latest - install: g++-13 - - toolset: gcc-14 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:24.04 - os: ubuntu-latest - install: g++-14 - - toolset: gcc - cxxflags: -funsigned-char - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:24.04 - os: ubuntu-latest - - toolset: clang - compiler: clang++-3.9 - cxxstd: "03,11,14" - container: ubuntu:18.04 - os: ubuntu-latest - install: clang-3.9 - - toolset: clang - compiler: clang++-4.0 - cxxstd: "03,11,14" - container: ubuntu:18.04 - os: ubuntu-latest - install: clang-4.0 - - toolset: clang - compiler: clang++-5.0 - cxxstd: "03,11,14,1z" - container: ubuntu:18.04 - os: ubuntu-latest - install: clang-5.0 - - toolset: clang - compiler: clang++-6.0 - cxxstd: "03,11,14,17" - os: ubuntu-20.04 - install: clang-6.0 - - toolset: clang - compiler: clang++-7 - cxxstd: "03,11,14,17" - os: ubuntu-20.04 - install: clang-7 - - toolset: clang - compiler: clang++-8 - cxxstd: "03,11,14,17" - os: ubuntu-20.04 - install: clang-8 - - toolset: clang - compiler: clang++-9 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - install: clang-9 - - toolset: clang - compiler: clang++-10 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - install: clang-10 - - toolset: clang - compiler: clang++-11 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - install: clang-11 - - toolset: clang - compiler: clang++-12 - cxxstd: "03,11,14,17,2a" - os: ubuntu-20.04 - install: clang-12 - - toolset: clang - compiler: clang++-13 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:22.04 - os: ubuntu-latest - install: clang-13 - - toolset: clang - compiler: clang++-14 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:22.04 - os: ubuntu-latest - install: clang-14 - - toolset: clang - compiler: clang++-15 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:22.04 - os: ubuntu-latest - install: clang-15 - - toolset: clang - compiler: clang++-16 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:24.04 - os: ubuntu-latest - install: clang-16 - - toolset: clang - compiler: clang++-17 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:24.04 - os: ubuntu-latest - install: clang-17 - - toolset: clang - compiler: clang++-18 - cxxstd: "03,11,14,17,20,2b" - container: ubuntu:24.04 - os: ubuntu-latest - install: clang-18 - - toolset: clang - cxxstd: "03,11,14,17,20,2b" - os: macos-13 - - toolset: clang - cxxstd: "03,11,14,17,20,2b" - os: macos-14 - - toolset: clang - cxxstd: "03,11,14,17,20,2b" - os: macos-15 - + # Linux, gcc + - { compiler: gcc-4.8, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-4.9, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: gcc-5, cxxstd: '03,11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-6, cxxstd: '03,11,14,17', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: gcc-7, cxxstd: '03,11,14,17', os: ubuntu-20.04 } + - { compiler: gcc-8, cxxstd: '03,11,14,17,2a', os: ubuntu-20.04 } + - { compiler: gcc-9, cxxstd: '03,11,14,17,2a', os: ubuntu-20.04 } + - { compiler: gcc-10, cxxstd: '03,11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-12, cxxstd: '03,11,14,17,20', os: ubuntu-22.04 } + - { compiler: gcc-13, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } + - { compiler: gcc-14, cxxstd: '11,14,17,20,2b', os: ubuntu-24.04 } + - { name: GCC w/ sanitizers, sanitize: yes, + compiler: gcc-13, cxxstd: '03,11,14,17,20', os: ubuntu-24.04 } + - { name: Collect coverage, coverage: yes, + compiler: gcc-13, cxxstd: '03,2b', os: ubuntu-24.04, install: 'g++-13-multilib', address-model: '32,64' } + + # Linux, clang + - { compiler: clang-3.5, cxxstd: '03,11', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.6, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.7, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.8, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:16.04' } + - { compiler: clang-3.9, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-4.0, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-5.0, cxxstd: '03,11,14,1z', os: ubuntu-latest, container: 'ubuntu:18.04' } + - { compiler: clang-6.0, cxxstd: '03,11,14,17', os: ubuntu-20.04 } + - { compiler: clang-7, cxxstd: '03,11,14,17', os: ubuntu-20.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-20.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 } + - { compiler: clang-12, cxxstd: '03,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: '03,11,14,17,20', os: ubuntu-22.04, install: 'clang-13 g++-12', gcc_toolchain: 12 } + - { compiler: clang-14, cxxstd: '03,11,14,17,20', os: ubuntu-22.04, install: 'clang-14 g++-12', gcc_toolchain: 12 } + - { compiler: clang-15, cxxstd: '03,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 } + # https://github.com/llvm/llvm-project/issues/59827: disabled 2b/23 for clang-17 with libstdc++13 in 24.04 + - { compiler: clang-17, cxxstd: '11,14,17,20', os: ubuntu-24.04 } + - { compiler: clang-18, cxxstd: '11,14,17,20,23,2c', os: ubuntu-24.04 } + + # libc++ + - { compiler: clang-6.0, cxxstd: '03,11,14', os: ubuntu-latest, container: 'ubuntu:18.04', stdlib: libc++, install: 'clang-6.0 libc++-dev libc++abi-dev' } + - { compiler: clang-7, cxxstd: '03,11,14,17', os: ubuntu-20.04, stdlib: libc++, install: 'clang-7 libc++-7-dev libc++abi-7-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' } + + - { name: MacOS w/ clang and sanitizers, + compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-13, sanitize: yes } + - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-14 } + - { compiler: clang, cxxstd: '03,11,14,17,20,2b', os: macos-15 } + + # Coverity Scan + # requires two github secrets in repo to activate; see ci/github/coverity.sh + # does not run on pull requests, only on pushes into develop and master + - { name: Coverity, coverity: yes, + compiler: clang-12, cxxstd: '03,20', os: ubuntu-20.04, ccache: no } + + # multiarch (bigendian testing) - does not support coverage yet + - { name: Big-endian, multiarch: yes, + compiler: clang, cxxstd: '17', os: ubuntu-22.04, ccache: no, distro: fedora, edition: 34, arch: s390x } + + + timeout-minutes: 120 runs-on: ${{matrix.os}} - container: image: ${{matrix.container}} volumes: - /node20217:/node20217:rw,rshared - ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }} - - defaults: - run: - shell: bash + env: {B2_USE_CCACHE: 1} steps: - - name: Setup container environment - if: matrix.container - run: | - apt-get update - apt-get -y install sudo python3 git g++ curl xz-utils - - - name: Install nodejs20glibc2.17 - if: ${{ startsWith( matrix.container, 'ubuntu:1' ) }} - run: | - curl -LO https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz - tar -xf node-v20.9.0-linux-x64-glibc-217.tar.xz --strip-components 1 -C /node20217 - ldd /__e/node20/bin/node + - name: Setup environment + run: | + if [ -f "/etc/debian_version" ]; then + echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV + export DEBIAN_FRONTEND=noninteractive + 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 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 + osver=$(lsb_release -sr | cut -f1 -d.) + pkgs="g++ git xz-utils" + # 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 + # 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.sanitize }}" == "yes" ]]; then + echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/test/suppressions.txt" >> $GITHUB_ENV + fi + git config --global pack.threads 0 + if [[ "${{matrix.container}}" == "ubuntu:1"* ]]; then + # Node 20 doesn't work with Ubuntu 16/18 glibc: https://github.com/actions/checkout/issues/1590 + curl -sL https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz | tar -xJ --strip-components 1 -C /node20217 + fi - uses: actions/checkout@v4 + 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@v4 + if: env.B2_USE_CCACHE + with: + path: ~/.ccache + key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{github.sha}} + restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- + + - 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: Install packages - if: matrix.install - run: | - sudo apt-get update - sudo apt-get -y install ${{matrix.install}} + if: startsWith(matrix.os, 'ubuntu') + run: | + 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) + + 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}}" + pkgs="${pkgs/gcc-/g++-}" + else + pkgs="${{matrix.install}}" + fi + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs + + - name: Setup GCC Toolchain + if: matrix.gcc_toolchain + 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" + ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" + mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" + ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" + + - name: Setup multiarch + if: matrix.multiarch + env: + BDDE_DISTRO: ${{matrix.distro}} + BDDE_EDITION: ${{matrix.edition}} + BDDE_ARCH: ${{matrix.arch}} + run: ci/github/setup_bdde.sh - name: Setup Boost - run: | - echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY - LIBRARY=${GITHUB_REPOSITORY#*/} - echo LIBRARY: $LIBRARY - echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV - echo GITHUB_BASE_REF: $GITHUB_BASE_REF - echo GITHUB_REF: $GITHUB_REF - REF=${GITHUB_BASE_REF:-$GITHUB_REF} - REF=${REF#refs/heads/} - echo REF: $REF - BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true - echo BOOST_BRANCH: $BOOST_BRANCH - cd .. - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY - git submodule update --init tools/boostdep - python3 tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - ./bootstrap.sh - ./b2 -d0 headers - - - name: Create user-config.jam - if: matrix.compiler - run: | - echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam + env: + B2_ADDRESS_MODEL: ${{matrix.address-model}} + B2_COMPILER: ${{matrix.compiler}} + 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 + if: matrix.coverage + run: ci/github/codecov.sh "setup" - name: Run tests - run: | - cd ../boost-root - ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} cxxflags=${{matrix.cxxflags}} variant=debug,release + if: '!matrix.coverity' + run: ci/build.sh + + - name: Upload coverage + if: matrix.coverage + run: ci/codecov.sh "upload" + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} + + - name: Run coverity + if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') + run: ci/github/coverity.sh + env: + COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} windows: - strategy: - 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,latest" - addrmd: 32,64 - os: windows-2019 - - toolset: msvc-14.3 - cxxstd: "14,17,20,latest" - addrmd: 32,64 - os: windows-2022 - - toolset: clang-win - cxxstd: "14,17,20,latest" - addrmd: 32,64 - os: windows-2022 - - toolset: gcc - cxxstd: "03,11,14,17,2a" - addrmd: 64 - os: windows-2019 - - runs-on: ${{matrix.os}} - - steps: - - uses: actions/checkout@v4 - - - name: Setup Boost - shell: cmd - run: | - echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% - for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi - echo LIBRARY: %LIBRARY% - echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% - echo GITHUB_BASE_REF: %GITHUB_BASE_REF% - echo GITHUB_REF: %GITHUB_REF% - if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% - set BOOST_BRANCH=develop - for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master - echo BOOST_BRANCH: %BOOST_BRANCH% - cd .. - git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - cmd /c bootstrap - b2 -d0 headers - - - name: Run tests + defaults: + run: shell: cmd - run: | - cd ../boost-root - b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release embed-manifest-via=linker - - posix-cmake-subdir: strategy: fail-fast: false matrix: include: - - os: ubuntu-20.04 - - os: ubuntu-22.04 - - os: ubuntu-24.04 - - os: macos-13 - - os: macos-14 - - os: macos-15 + - { 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: 'latest', addrmd: '64', os: windows-2022 } + - { toolset: clang-win, cxxstd: '14,17,latest', addrmd: '32,64', os: windows-2022 } + - { toolset: gcc, cxxstd: '03,11,14,17,2a', addrmd: '64', os: windows-2019 } runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v4 - - name: Install packages - if: matrix.install - run: sudo apt install ${{matrix.install}} - - - name: Setup Boost - run: | - echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY - LIBRARY=${GITHUB_REPOSITORY#*/} - echo LIBRARY: $LIBRARY - echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV - echo GITHUB_BASE_REF: $GITHUB_BASE_REF - echo GITHUB_REF: $GITHUB_REF - REF=${GITHUB_BASE_REF:-$GITHUB_REF} - REF=${REF#refs/heads/} - echo REF: $REF - BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true - echo BOOST_BRANCH: $BOOST_BRANCH - cd .. - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - - - name: Use library with add_subdirectory + - 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: | - cd ../boost-root/libs/$LIBRARY/test/cmake_subdir_test - mkdir __build__ && cd __build__ - cmake .. - cmake --build . - ctest --output-on-failure --no-tests=error - - posix-cmake-install: - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-20.04 - - os: ubuntu-22.04 - - os: ubuntu-24.04 - - os: macos-13 - - os: macos-14 - - os: macos-15 - - runs-on: ${{matrix.os}} - - steps: - - uses: actions/checkout@v4 - - - name: Install packages - if: matrix.install - run: sudo apt install ${{matrix.install}} + REM Copy ci folder if not testing Boost.CI + if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci + rmdir /s /q boost-ci-cloned - name: Setup Boost - run: | - echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY - LIBRARY=${GITHUB_REPOSITORY#*/} - echo LIBRARY: $LIBRARY - echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV - echo GITHUB_BASE_REF: $GITHUB_BASE_REF - echo GITHUB_REF: $GITHUB_REF - REF=${GITHUB_BASE_REF:-$GITHUB_REF} - REF=${REF#refs/heads/} - echo REF: $REF - BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true - echo BOOST_BRANCH: $BOOST_BRANCH - cd .. - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - - - name: Configure - run: | - cd ../boost-root - mkdir __build__ && cd __build__ - cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DCMAKE_INSTALL_PREFIX=~/.local .. - - - name: Install - run: | - cd ../boost-root/__build__ - cmake --build . --target install - - - name: Use the installed library - run: | - cd ../boost-root/libs/$LIBRARY/test/cmake_install_test && mkdir __build__ && cd __build__ - cmake -DCMAKE_INSTALL_PREFIX=~/.local .. - cmake --build . - ctest --output-on-failure --no-tests=error - - posix-cmake-test: - strategy: - fail-fast: false - matrix: - include: - - os: ubuntu-20.04 - - os: ubuntu-22.04 - - os: ubuntu-24.04 - - os: macos-13 - - os: macos-14 - - os: macos-15 - - runs-on: ${{matrix.os}} - - steps: - - uses: actions/checkout@v4 - - - name: Install packages - if: matrix.install - run: sudo apt install ${{matrix.install}} - - - name: Setup Boost - run: | - echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY - LIBRARY=${GITHUB_REPOSITORY#*/} - echo LIBRARY: $LIBRARY - echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV - echo GITHUB_BASE_REF: $GITHUB_BASE_REF - echo GITHUB_REF: $GITHUB_REF - REF=${GITHUB_BASE_REF:-$GITHUB_REF} - REF=${REF#refs/heads/} - echo REF: $REF - BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true - echo BOOST_BRANCH: $BOOST_BRANCH - cd .. - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY - - - name: Configure - run: | - cd ../boost-root - mkdir __build__ && cd __build__ - cmake -DBOOST_INCLUDE_LIBRARIES=$LIBRARY -DBUILD_TESTING=ON .. - - - name: Build tests - run: | - cd ../boost-root/__build__ - cmake --build . --target tests + run: ci\github\install.bat - name: Run tests - run: | - cd ../boost-root/__build__ - ctest --output-on-failure --no-tests=error - - windows-cmake-subdir: + if: '!matrix.coverage' + run: ci\build.bat + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + + - name: Collect coverage + shell: powershell + if: matrix.coverage + run: ci\opencppcoverage.ps1 + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v5 + with: + disable_search: true + fail_ci_if_error: true + files: __out/cobertura.xml + name: github-actions + token: ${{secrets.CODECOV_TOKEN}} + verbose: true + + MSYS2: + defaults: + run: + shell: msys2 {0} strategy: fail-fast: false matrix: include: - - os: windows-2019 - - os: windows-2022 + - { sys: MINGW32, compiler: gcc, cxxstd: '03,11,17,20' } + - { sys: MINGW64, compiler: gcc, cxxstd: '03,11,17,20' } - runs-on: ${{matrix.os}} + runs-on: windows-latest steps: - uses: actions/checkout@v4 - - name: Setup Boost - shell: cmd - run: | - echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% - for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi - echo LIBRARY: %LIBRARY% - echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% - echo GITHUB_BASE_REF: %GITHUB_BASE_REF% - echo GITHUB_REF: %GITHUB_REF% - if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% - set BOOST_BRANCH=develop - for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master - echo BOOST_BRANCH: %BOOST_BRANCH% - cd .. - git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - - - name: Use library with add_subdirectory (Debug) - shell: cmd - run: | - cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test - mkdir __build__ && cd __build__ - cmake .. - cmake --build . --config Debug - ctest --output-on-failure --no-tests=error -C Debug - - - name: Use library with add_subdirectory (Release) - shell: cmd - run: | - cd ../boost-root/libs/%LIBRARY%/test/cmake_subdir_test/__build__ - cmake --build . --config Release - ctest --output-on-failure --no-tests=error -C Release - - windows-cmake-install: - strategy: - fail-fast: false - matrix: - include: - - os: windows-2019 - - os: windows-2022 - - runs-on: ${{matrix.os}} - - 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 - shell: cmd - run: | - echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% - for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi - echo LIBRARY: %LIBRARY% - echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% - echo GITHUB_BASE_REF: %GITHUB_BASE_REF% - echo GITHUB_REF: %GITHUB_REF% - if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% - set BOOST_BRANCH=develop - for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master - echo BOOST_BRANCH: %BOOST_BRANCH% - cd .. - git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - - - name: Configure - shell: cmd - run: | - cd ../boost-root - mkdir __build__ && cd __build__ - cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix .. + env: + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + run: ci/github/install.sh - - name: Install (Debug) - shell: cmd - run: | - cd ../boost-root/__build__ - cmake --build . --target install --config Debug - - - name: Install (Release) - shell: cmd - run: | - cd ../boost-root/__build__ - cmake --build . --target install --config Release + - name: Run tests + run: ci/build.sh - - name: Use the installed library (Debug) - shell: cmd + # Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS + - name: Run CMake tests run: | - cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test && mkdir __build__ && cd __build__ - cmake -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix .. - cmake --build . --config Debug - ctest --output-on-failure --no-tests=error -C Debug + 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 - - name: Use the installed library (Release) - shell: cmd - run: | - cd ../boost-root/libs/%LIBRARY%/test/cmake_install_test/__build__ - cmake --build . --config Release - ctest --output-on-failure --no-tests=error -C Release + CMake: + defaults: + run: + shell: bash - windows-cmake-test: strategy: fail-fast: false matrix: include: - - os: windows-2019 - - os: windows-2022 + - { 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: 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@v4 - + - 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 - shell: cmd - run: | - echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% - for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi - echo LIBRARY: %LIBRARY% - echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% - echo GITHUB_BASE_REF: %GITHUB_BASE_REF% - echo GITHUB_REF: %GITHUB_REF% - if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% - set BOOST_BRANCH=develop - for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master - echo BOOST_BRANCH: %BOOST_BRANCH% - cd .. - git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root - cd boost-root - xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ - git submodule update --init tools/boostdep - python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY% - - - name: Configure - shell: cmd - run: | - cd ../boost-root - mkdir __build__ && cd __build__ - cmake -DBOOST_INCLUDE_LIBRARIES=%LIBRARY% -DBUILD_TESTING=ON .. - - - name: Build tests (Debug) - shell: cmd - run: | - cd ../boost-root/__build__ - cmake --build . --target tests --config Debug - - - name: Run tests (Debug) - shell: cmd - run: | - cd ../boost-root/__build__ - ctest --output-on-failure --no-tests=error -C Debug - - - name: Build tests (Release) - shell: cmd - run: | - cd ../boost-root/__build__ - cmake --build . --target tests --config Release - - - name: Run tests (Release) - shell: cmd - run: | - cd ../boost-root/__build__ - ctest --output-on-failure --no-tests=error -C Release + env: {B2_DONT_BOOTSTRAP: 1} + run: source ci/github/install.sh + + - 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 . --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 22310abd9..6e87d2f7c 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ -MPL, part of collection of the [Boost C++ Libraries](http://github.com/boostorg), provides a general-purpose, high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions. +MPL, part of collection of the [Boost C++ Libraries](https://github.com/boostorg), provides a general-purpose, high-level C++ template metaprogramming framework of compile-time algorithms, sequences and metafunctions. ### License -Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt). +Distributed under the [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt). ### Properties @@ -11,10 +11,11 @@ Distributed under the [Boost Software License, Version 1.0](http://www.boost.org ### Build Status -Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | -:-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- | -[`master`](https://github.com/boostorg/mpl/tree/master) | [![Build Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/mpl/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6flb/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrhfm/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/mpl/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/mpl.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/mpl/doc/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/mpl.html) -[`develop`](https://github.com/boostorg/mpl/tree/develop) | [![Build Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/mpl/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/lx9pjj2ixqod6flb/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/mpl-nrhfm/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/mpl/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/mpl.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/mpl/doc/index.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/mpl.html) + +| Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | +| :-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- | +| [`master`](https://github.com/boostorg/mpl/tree/master) | [![Build Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/mpl/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/49kygihpsvv2sps0/branch/master?svg=true)](https://ci.appveyor.com/project/cppalliance/mpl/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/master/graph/badge.svg?token=31bBblRchG)](https://codecov.io/gh/boostorg/mpl/tree/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/mpl.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/mpl) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](https://www.boost.org/development/tests/master/developer/mpl.html) +| [`develop`](https://github.com/boostorg/mpl/tree/develop) | [![Build Status](https://github.com/boostorg/mpl/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/mpl/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/49kygihpsvv2sps0/branch/develop?svg=true)](https://ci.appveyor.com/project/cppalliance/mpl/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/15866/badge.svg)](https://scan.coverity.com/projects/boostorg-mpl) | [![codecov](https://codecov.io/gh/boostorg/mpl/branch/develop/graph/badge.svg?token=31bBblRchG)](https://codecov.io/gh/boostorg/mpl/tree/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/mpl.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/mpl) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](https://www.boost.org/development/tests/develop/developer/mpl.html) ### Directories @@ -27,8 +28,8 @@ Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | ### More information -* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,boost-mpl) +* [Ask questions](https://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,boost-mpl) * [Report bugs](https://github.com/boostorg/mpl/issues): Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well. -* Submit your patches as pull requests against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt). -* Discussions about the library are held on the [Boost developers mailing list](http://www.boost.org/community/groups.html#main). Be sure to read the [discussion policy](http://www.boost.org/community/policy.html) before posting and add the `[mpl]` tag at the beginning of the subject line. +* Submit your patches as pull requests against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt). +* Discussions about the library are held on the [Boost developers mailing list](https://www.boost.org/community/groups.html#main). Be sure to read the [discussion policy](https://www.boost.org/community/policy.html) before posting and add the `[mpl]` tag at the beginning of the subject line. From 8fc48aaee2247b714d8c2d662e712ed25204df1f Mon Sep 17 00:00:00 2001 From: Jim King Date: Fri, 3 Jan 2025 12:34:15 +0000 Subject: [PATCH 20/20] Run char and integral_c tests with -funsigned-char --- test/Jamfile.v2 | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 66ed440d8..7502340e5 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -62,9 +62,10 @@ compile inherit.cpp ; compile insert.cpp ; compile insert_range.cpp ; run int.cpp ; -run char.cpp ; -run integral_c.cpp - : : : vacpp:-qchars=signed ; +run char.cpp : : : : char ; +run char.cpp : : : gcc:"-funsigned-char -Wnarrowing -Werror" : char_unsigned ; +run integral_c.cpp : : : vacpp:-qchars=signed : integral_c ; +run integral_c.cpp : : : gcc:"-funsigned-char -Wnarrowing -Werror" : integral_c_unsigned ; compile is_placeholder.cpp ; compile is_sequence.cpp ; compile iterator_tags.cpp ;