Compare commits

...

43 Commits

Author SHA1 Message Date
d04e4a692f Update ci.yml 2025-06-09 02:57:47 +03:00
54d0632718 Merge pull request #30 from sergiud/missing-reference_wrapper-include
Add missing include
2025-05-17 00:05:22 +09:00
559d3f3cb5 Add missing include 2025-05-16 14:25:46 +02:00
f8bc34da9a Merge pull request #28 from Flamefire/patch-1
Fix node 20 issue on GHA CI
2024-12-09 21:35:46 +08:00
0b71c6e21d Install xz 2024-12-08 20:57:33 +01:00
8d24ab76bf Remove macos-12 from GHA 2024-12-08 20:42:48 +01:00
fb0b1df64e Update containers 2024-12-08 14:43:38 +01:00
b45bfadd63 Use hosted node 2024-12-08 13:11:28 +01:00
df21131b10 Fix node 20 issue on GHA CI 2024-12-07 19:42:53 +01:00
fe90ca4023 Update ci.yml 2024-09-22 18:14:21 +03:00
7f041f7a1c Update build.jam 2024-09-22 18:09:20 +03:00
c260ed3991 Merge pull request #27 from grafikrobot/modular
Add support for modular build structure.
2024-08-19 10:45:51 +08:00
dc7c09d8f0 Update build deps. 2024-08-09 22:38:12 -05:00
ccbb58b774 Move inter-lib dependencies to a project variable and into the build targets. 2024-07-23 22:34:22 -05:00
56044c24f9 Update copyright dates. 2024-07-20 22:52:04 -05:00
63c004dd14 Bump B2 require to 5.2 2024-06-14 11:33:56 -05:00
a02b9058ee Add requires-b2 check to top-level build file. 2024-05-05 09:00:01 -05:00
716ad07a9c Switch to library requirements instead of source. As source puts extra source in install targets. 2024-03-29 21:16:00 -05:00
862a6ece3e Make the library modular usable. 2024-03-11 08:38:17 -05:00
b67941dd7d Merge branch 'feature/use_invoke_swap' of https://github.com/Lastique/tuple into feature/pr-25 2023-09-28 21:53:59 +03:00
7fa72d91b7 Use std::tmpnam instead of a hardcoded file name, to avoid -j problems 2023-09-28 21:49:27 +03:00
cd5cac8d76 Change 3.3f to 3.25f to avoid equality issues with inexact float literal constants 2023-09-28 21:37:14 +03:00
db3fd72bb5 Regenerate CMakeLists.txt 2023-09-28 21:35:51 +03:00
c59605060a Add CMake tests 2023-09-28 21:22:03 +03:00
50b5b6a2cb Update test/Jamfile; add test/quick.cpp 2023-09-28 21:13:10 +03:00
6fe092c269 Update ci.yml 2023-09-28 21:08:10 +03:00
5d0ec18a0c Switch to boost::core::invoke_swap.
boost::swap is deprecated and will be removed. Use boost::core::invoke_swap
as a replacement.
2023-09-02 20:58:41 +03:00
453e061434 Merge pull request #24 from fanquake/patch-1
refactor: use core/swap.hpp over utility/swap.hpp
2022-12-05 06:07:24 +08:00
dc9592de76 refactor: use core/swap.hpp over utility/swap.hpp
The later is deprecated.
2022-12-04 15:24:10 +00:00
5d1c899afb Merge pull request #23 from fanquake/use_core_ref
refactor: use boost/core/ref.hpp over boost/ref.hpp
2022-08-24 06:46:28 +08:00
827a59efc4 refactor: use boost/core/ref.hpp over boost/ref.hpp
The later is deprecated:

```cpp
// The header file at this path is deprecated;
// use boost/core/ref.hpp instead.

include <boost/core/ref.hpp>
```
2022-08-23 15:48:49 +01:00
500e4fa0a2 Merge pull request #21 from igaztanaga/patch-1
Small fix for those using -Wsign-conversion
2021-12-30 23:20:18 +08:00
ded3c1d5c1 Merge branch 'boostorg:develop' into patch-1 2021-12-30 15:02:46 +01:00
aa16ae3ff0 Merge pull request #20 from sdarwin/feature/gha_fix_1
Update GitHub Actions CI file
2021-11-16 19:25:04 +02:00
7c01e916a3 More fixes for -Wsign-conversion 2021-10-11 13:26:45 +02:00
819b3dd67b Small fix for those using -Wsign-conversion 2021-10-11 13:18:23 +02:00
0b8f586814 Update GitHub Actions CI file 2021-07-30 16:10:39 +00:00
ec4f3b23c2 Merge branch 'master' into develop 2021-06-10 01:38:57 +03:00
ab9a627688 Update CMakeLists.txt 2021-06-10 00:49:34 +03:00
5a80dcdbf3 Merge pull request #19 from sdarwin/githubactions
GitHub Actions config
2021-03-05 07:09:48 +08:00
ceb4528e46 Add GitHub Actions config [ci skip] 2021-03-04 15:07:23 +00:00
c8c44605ed Merge pull request #18 from eldiener/develop
[skip ci] Add "cxxstd" json field
2021-01-22 08:00:10 +08:00
d4316fb288 [skip ci] Add "cxxstd" json field. The "cxxstd" json field is being added to each Boost library's meta json information for libraries in order to specify the minumum C++ standard compilation level. The value of this field matches one of the values for 'cxxstd' in Boost.Build. The purpose of doing this is to provide information for the Boost website documentation for each library which will specify the minimum C++ standard compilation that an end-user must employ in order to use the particular library. This will aid end-users who want to know if they can successfully use a Boost library based on their C++ compiler's compilation level, without having to search the library's documentation to find this out. 2021-01-21 16:24:54 -05:00
14 changed files with 837 additions and 50 deletions

646
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,646 @@
name: CI
on:
pull_request:
push:
branches:
- master
- develop
- feature/**
env:
UBSAN_OPTIONS: print_stacktrace=1
jobs:
posix:
strategy:
fail-fast: false
matrix:
include:
- toolset: gcc-4.8
cxxstd: "03,11"
container: ubuntu:18.04
os: ubuntu-latest
install: g++-4.8-multilib
address-model: 32,64
- toolset: gcc-5
cxxstd: "03,11,14,1z"
container: ubuntu:18.04
os: ubuntu-latest
install: g++-5-multilib
address-model: 32,64
- toolset: gcc-6
cxxstd: "03,11,14,1z"
container: ubuntu:18.04
os: ubuntu-latest
install: g++-6-multilib
address-model: 32,64
- toolset: gcc-7
cxxstd: "03,11,14,17"
container: ubuntu:20.04
os: ubuntu-latest
install: g++-7-multilib
address-model: 32,64
- toolset: gcc-8
cxxstd: "03,11,14,17,2a"
container: ubuntu:20.04
os: ubuntu-latest
install: g++-8-multilib
address-model: 32,64
- toolset: gcc-9
cxxstd: "03,11,14,17,2a"
container: ubuntu:20.04
os: ubuntu-latest
install: g++-9-multilib
address-model: 32,64
- toolset: gcc-10
cxxstd: "03,11,14,17,2a"
container: ubuntu:20.04
os: ubuntu-latest
install: g++-10-multilib
address-model: 32,64
- toolset: gcc-11
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: g++-11-multilib
address-model: 32,64
- toolset: gcc-12
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: g++-12-multilib
address-model: 32,64
- toolset: gcc-13
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-24.04
install: g++-13-multilib
address-model: 32,64
- toolset: gcc-14
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-latest
container: ubuntu:24.04
install: g++-14-multilib
address-model: 32,64
- toolset: clang
compiler: clang++-3.9
cxxstd: "03,11,14"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-3.9
- toolset: clang
compiler: clang++-4.0
cxxstd: "03,11,14"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-4.0
- toolset: clang
compiler: clang++-5.0
cxxstd: "03,11,14,1z"
os: ubuntu-latest
container: ubuntu:18.04
install: clang-5.0
- toolset: clang
compiler: clang++-6.0
cxxstd: "03,11,14,17"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-6.0
- toolset: clang
compiler: clang++-7
cxxstd: "03,11,14,17"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-7
- toolset: clang
compiler: clang++-8
cxxstd: "03,11,14,17"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-8
- toolset: clang
compiler: clang++-9
cxxstd: "03,11,14,17"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-9
- toolset: clang
compiler: clang++-10
cxxstd: "03,11,14,17,2a"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-10
- toolset: clang
compiler: clang++-11
cxxstd: "03,11,14,17,2a"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-11
- toolset: clang
compiler: clang++-12
cxxstd: "03,11,14,17,20"
container: ubuntu:20.04
os: ubuntu-latest
install: clang-12
- toolset: clang
compiler: clang++-13
cxxstd: "03,11,14,17,20"
os: ubuntu-22.04
install: clang-13
- toolset: clang
compiler: clang++-14
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: clang-14
- toolset: clang
compiler: clang++-15
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-22.04
install: clang-15
- toolset: clang
compiler: clang++-16
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-24.04
install: clang-16
- toolset: clang
compiler: clang++-17
cxxstd: "03,11,14,17,20,2b"
os: ubuntu-24.04
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
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
steps:
- name: Setup container environment
if: matrix.container
run: |
apt-get update
apt-get -y install sudo python3 git g++ curl xz-utils
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
- name: Install packages
if: matrix.install
run: |
sudo apt-get update
sudo apt-get -y 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
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
run: |
cd ../boost-root
export ADDRMD=${{matrix.address-model}}
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} ${ADDRMD:+address-model=$ADDRMD} variant=debug,release
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,latest"
addrmd: 32,64
os: windows-2022
- toolset: gcc
cxxstd: "03,11,14,17,2a"
addrmd: 64
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%
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:
- 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-get -y 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: |
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-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-get -y 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 -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-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-get -y 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
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error
windows-cmake-subdir:
strategy:
fail-fast: false
matrix:
include:
- os: windows-2022
- os: windows-2025
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: 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-2022
- os: windows-2025
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% -DCMAKE_INSTALL_PREFIX=C:/cmake-prefix ..
- 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-2022
- os: windows-2025
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/__build__
ctest --output-on-failure --no-tests=error -C Release

View File

@ -1,12 +1,11 @@
# Copyright 2018 Mike Dev
# Generated by `boostdep --cmake tuple`
# Copyright 2020, 2021 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
#
# NOTE: CMake support for Boost.Tuple is currently experimental at best
# and the interface is likely to change in the future
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5)
project(BoostTuple)
cmake_minimum_required(VERSION 3.5...3.20)
project(boost_tuple VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
add_library(boost_tuple INTERFACE)
add_library(Boost::tuple ALIAS boost_tuple)
@ -14,9 +13,15 @@ add_library(Boost::tuple ALIAS boost_tuple)
target_include_directories(boost_tuple INTERFACE include)
target_link_libraries(boost_tuple
INTERFACE
Boost::config
Boost::core
Boost::static_assert
Boost::type_traits
INTERFACE
Boost::config
Boost::core
Boost::static_assert
Boost::type_traits
)
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)
endif()

22
build.jam Normal file
View File

@ -0,0 +1,22 @@
# 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/static_assert//boost_static_assert
/boost/type_traits//boost_type_traits ;
project /boost/tuple ;
explicit
[ alias boost_tuple : : : : <include>include <library>$(boost_dependencies) ]
[ alias all : boost_tuple test ]
;
call-if : boost-library tuple
;

View File

@ -34,11 +34,13 @@
#include <utility> // needed for the assignment from pair to tuple
#include <cstddef> // for std::size_t
#include <boost/core/invoke_swap.hpp>
#include <boost/core/ref.hpp>
#include <boost/type_traits/cv_traits.hpp>
#include <boost/type_traits/function_traits.hpp>
#include <boost/type_traits/integral_constant.hpp>
#include <boost/utility/swap.hpp>
#include <boost/detail/workaround.hpp> // needed for BOOST_WORKAROUND
@ -93,7 +95,7 @@ namespace detail {
template<class T>
class generate_error;
template<int N>
template<std::size_t N>
struct drop_front {
template<class Tuple>
struct apply {
@ -127,14 +129,14 @@ struct drop_front<0> {
#ifndef BOOST_NO_CV_SPECIALIZATIONS
template<int N, class T>
template<std::size_t N, class T>
struct element
{
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<T>::type::head_type type;
};
template<int N, class T>
template<std::size_t N, class T>
struct element<N, const T>
{
private:
@ -151,14 +153,14 @@ public:
namespace detail {
template<int N, class T, bool IsConst>
template<std::size_t N, class T, bool IsConst>
struct element_impl
{
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
apply<T>::type::head_type type;
};
template<int N, class T>
template<std::size_t N, class T>
struct element_impl<N, T, true /* IsConst */>
{
typedef BOOST_DEDUCED_TYPENAME detail::drop_front<N>::BOOST_NESTED_TEMPLATE
@ -169,7 +171,7 @@ struct element_impl<N, T, true /* IsConst */>
} // end of namespace detail
template<int N, class T>
template<std::size_t N, class T>
struct element:
public detail::element_impl<N, T, ::boost::is_const<T>::value>
{
@ -210,7 +212,7 @@ template <class T> struct access_traits<T&> {
// get function for non-const cons-lists, returns a reference to the element
template<int N, class HT, class TT>
template<std::size_t N, class HT, class TT>
inline typename access_traits<
typename element<N, cons<HT, TT> >::type
>::non_const_type
@ -224,7 +226,7 @@ get(cons<HT, TT>& c) {
// get function for const cons-lists, returns a const reference to
// the element. If the element is a reference, returns the reference
// as such (that is, can return a non-const reference)
template<int N, class HT, class TT>
template<std::size_t N, class HT, class TT>
inline typename access_traits<
typename element<N, cons<HT, TT> >::type
>::const_type
@ -333,7 +335,7 @@ struct cons {
}
// get member functions (non-const and const)
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, cons<HT, TT> >::type
>::non_const_type
@ -341,7 +343,7 @@ struct cons {
return boost::tuples::get<N>(*this); // delegate to non-member get
}
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, cons<HT, TT> >::type
>::const_type
@ -403,7 +405,7 @@ struct cons<HT, null_type> {
// is illformed if HT is a reference
cons& operator=(const cons& u) { head = u.head; return *this; }
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, self_type>::type
>::non_const_type
@ -411,7 +413,7 @@ struct cons<HT, null_type> {
return boost::tuples::get<N>(*this);
}
template <int N>
template <std::size_t N>
typename access_traits<
typename element<N, self_type>::type
>::const_type
@ -424,27 +426,27 @@ struct cons<HT, null_type> {
// templates for finding out the length of the tuple -------------------
template<class T>
struct length: boost::integral_constant<int, 1 + length<typename T::tail_type>::value>
struct length: boost::integral_constant<std::size_t, 1 + length<typename T::tail_type>::value>
{
};
template<>
struct length<tuple<> >: boost::integral_constant<int, 0>
struct length<tuple<> >: boost::integral_constant<std::size_t, 0>
{
};
template<>
struct length<tuple<> const>: boost::integral_constant<int, 0>
struct length<tuple<> const>: boost::integral_constant<std::size_t, 0>
{
};
template<>
struct length<null_type>: boost::integral_constant<int, 0>
struct length<null_type>: boost::integral_constant<std::size_t, 0>
{
};
template<>
struct length<null_type const>: boost::integral_constant<int, 0>
struct length<null_type const>: boost::integral_constant<std::size_t, 0>
{
};
@ -676,20 +678,20 @@ struct make_tuple_traits<T&> {
// All arrays are converted to const. This is because make_tuple takes its
// parameters as const T& and thus the knowledge of the potential
// non-constness of actual argument is lost.
template<class T, int n> struct make_tuple_traits <T[n]> {
template<class T, std::size_t n> struct make_tuple_traits <T[n]> {
typedef const T (&type)[n];
};
template<class T, int n>
template<class T, std::size_t n>
struct make_tuple_traits<const T[n]> {
typedef const T (&type)[n];
};
template<class T, int n> struct make_tuple_traits<volatile T[n]> {
template<class T, std::size_t n> struct make_tuple_traits<volatile T[n]> {
typedef const volatile T (&type)[n];
};
template<class T, int n>
template<class T, std::size_t n>
struct make_tuple_traits<const volatile T[n]> {
typedef const volatile T (&type)[n];
};
@ -963,11 +965,11 @@ void swap(tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>& lhs,
inline void swap(null_type&, null_type&) {}
template<class HH>
inline void swap(cons<HH, null_type>& lhs, cons<HH, null_type>& rhs) {
::boost::swap(lhs.head, rhs.head);
::boost::core::invoke_swap(lhs.head, rhs.head);
}
template<class HH, class TT>
inline void swap(cons<HH, TT>& lhs, cons<HH, TT>& rhs) {
::boost::swap(lhs.head, rhs.head);
::boost::core::invoke_swap(lhs.head, rhs.head);
::boost::tuples::swap(lhs.tail, rhs.tail);
}
template <class T0, class T1, class T2, class T3, class T4,

View File

@ -24,7 +24,7 @@ namespace boost { namespace python { class tuple; }}
#include <boost/static_assert.hpp>
// other compilers
#include <boost/ref.hpp>
#include <boost/core/ref.hpp>
#include <boost/tuple/detail/tuple_basic.hpp>

View File

@ -13,5 +13,6 @@
],
"maintainers": [
"Jaakko Jarvi <jarvi -at- cs.tamu.edu>"
]
],
"cxxstd": "03"
}

11
test/CMakeLists.txt Normal file
View File

@ -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 LINK_LIBRARIES Boost::tuple Boost::core)
endif()

View File

@ -1,11 +1,14 @@
# Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
# Distributed under the Boost Software License, Version 1.0.
test-suite tuple :
[ run tuple_test_bench.cpp ]
[ run io_test.cpp ]
[ run another_tuple_test_bench.cpp ]
[ run std_tuple_size.cpp ]
[ run std_tuple_element.cpp ]
[ run structured_bindings.cpp ]
;
import testing ;
project : requirements <library>/boost/tuple//boost_tuple ;
run tuple_test_bench.cpp ;
run io_test.cpp ;
run another_tuple_test_bench.cpp ;
run std_tuple_size.cpp ;
run std_tuple_element.cpp ;
run structured_bindings.cpp ;
run quick.cpp ;

View File

@ -0,0 +1,17 @@
# 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
cmake_minimum_required(VERSION 3.5...3.16)
project(cmake_install_test LANGUAGES CXX)
find_package(boost_tuple REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main Boost::tuple)
enable_testing()
add_test(main main)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -0,0 +1,18 @@
// Copyright 2017, 2021 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
#include <boost/tuple/tuple.hpp>
#include <cassert>
#define BOOST_TEST(expr) assert(expr)
#define BOOST_TEST_EQ(x1, x2) assert((x1)==(x2))
int main()
{
boost::tuple<int, int, int> tp( 1, 2, 3 );
BOOST_TEST_EQ( boost::get<0>(tp), 1 );
BOOST_TEST_EQ( boost::get<1>(tp), 2 );
BOOST_TEST_EQ( boost::get<2>(tp), 3 );
}

View File

@ -0,0 +1,40 @@
# 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
cmake_minimum_required(VERSION 3.5...3.20)
project(cmake_subdir_test LANGUAGES CXX)
add_subdirectory(../.. boostorg/tuple)
set(deps
# Primary dependencies
config
core
static_assert
type_traits
# Secondary dependencies
assert
throw_exception
)
foreach(dep IN LISTS deps)
add_subdirectory(../../../${dep} boostorg/${dep})
endforeach()
# --target check
add_executable(quick ../quick.cpp)
target_link_libraries(quick Boost::tuple Boost::core)
enable_testing()
add_test(quick quick)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $<CONFIG>)

View File

@ -10,6 +10,8 @@
//
// Testing the I/O facilities of tuples
#define _CRT_SECURE_NO_WARNINGS // std::tmpnam
#include "boost/tuple/tuple_io.hpp"
#include "boost/tuple/tuple_comparison.hpp"
@ -20,6 +22,7 @@
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstdio>
#if defined BOOST_NO_STRINGSTREAM
#include <strstream>
@ -83,7 +86,9 @@ int main() {
os4 << std::setw(10) << make_tuple(1, 2, 3);
BOOST_CHECK (os4.str() == std::string(" (1 2 3)") );
std::ofstream tmp("temp.tmp");
std::string fn = std::tmpnam( 0 );
std::ofstream tmp( fn.c_str() );
#if !defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
tmp << make_tuple("One", "Two", 3);
@ -94,7 +99,7 @@ int main() {
tmp.close();
// When teading tuples from a stream, manipulators must be set correctly:
std::ifstream tmp3("temp.tmp");
std::ifstream tmp3( fn.c_str() );
tuple<std::string, std::string, int> j;
#if !defined (BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
@ -109,6 +114,7 @@ int main() {
tmp3.close();
std::remove( fn.c_str() );
// reading tuple<int, int, int> in format (a b c);
useThisIStringStream is1("(100 200 300)");

16
test/quick.cpp Normal file
View File

@ -0,0 +1,16 @@
// Copyright 2023 Peter Dimov.
// Distributed under the Boost Software License, Version 1.0.
#include <boost/tuple/tuple.hpp>
#include <boost/core/lightweight_test.hpp>
int main()
{
boost::tuple<int, int, int> tp( 1, 2, 3 );
BOOST_TEST_EQ( boost::get<0>(tp), 1 );
BOOST_TEST_EQ( boost::get<1>(tp), 2 );
BOOST_TEST_EQ( boost::get<2>(tp), 3 );
return boost::report_errors();
}

View File

@ -421,9 +421,9 @@ void cons_test()
// ----------------------------------------------------------------------------
void const_tuple_test()
{
const tuple<int, float> t1(5, 3.3f);
const tuple<int, float> t1(5, 3.25f);
BOOST_CHECK(get<0>(t1) == 5);
BOOST_CHECK(get<1>(t1) == 3.3f);
BOOST_CHECK(get<1>(t1) == 3.25f);
}
// ----------------------------------------------------------------------------