Compare commits

...

16 Commits

Author SHA1 Message Date
Sergey Chebotarev 2358570f2d Remove static (#90) 2025-10-23 11:37:57 +03:00
James E. King III 02ec362f5c Complete python3 fixes for issue #67 2025-07-03 08:55:00 -04:00
Thomas Höhlig 4b8160057a Fix scripts to add python3 support
* fixed libraries include
  * fixed incorrect usage of python2 string
  * fixed python2 to python3 script issues (2to3) like print ""
  * fixed data types
  * fixed python3 usage of str instead of string (join, split etc.)
  * added support to determine the absolute path of the executable
    binary of the current Python interpreter
    * thx @Bagira80 for his support

Fixes issue: #67

Signed-off-by: Thomas Höhlig <thoehlig@benocs.com>
2025-07-02 23:52:03 -04:00
James E. King III 03869de68e Implement reusable Boost.CI workflow for GHA 2025-07-02 22:09:37 -04:00
Peter Dimov 74d927f984 Update ci.yml 2025-06-27 02:27:08 +03:00
Peter Dimov aa3b1c464d Condition macro workarounds on _MSC_EXTENSIONS instead of _MSC_VER. Fixes #84. 2025-06-27 02:10:14 +03:00
Peter Dimov 7df84b35eb Add a test for the conflict with <ciso646> under MSVC. Refs #84. 2025-06-26 22:33:18 +03:00
aihao1007 cd74f40d46 Fix BOOST_MPL_AUX_ASSERT_NOT_NA 2025-01-03 15:32:30 -05:00
Ivan Komissarov 502078c91d 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
2025-01-03 11:34:47 -05:00
Jim King 2b7937ac6f Run char and integral_c tests with -funsigned-char 2025-01-03 12:34:15 +00:00
Jim King 6172029f82 Update CI to 2024.12 spec, update README 2025-01-03 12:32:55 +00:00
Peter Dimov d223d3cd60 Work around warnings in char.cpp and integral_c.cpp when char is unsigned. Fixes #50. 2025-01-02 16:43:59 +02:00
Peter Dimov bace27426e Add a CI job testing -funsigned-char 2025-01-02 16:33:25 +02:00
Peter Dimov c8a1f64ff6 Apply Node20 workaround 2025-01-02 16:06:34 +02:00
Peter Dimov 4b34fa1378 Update ci.yml 2025-01-02 16:05:45 +02:00
René Ferdinand Rivera Morell bf4a5afb3c 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 <source> references to <library>.

* Update copyright dates.

* Move inter-lib dependencies to a project variable and into the build targets.

* Update build deps.
2024-11-30 17:11:24 -05:00
21 changed files with 204 additions and 762 deletions
+6 -24
View File
@@ -33,6 +33,12 @@ branches:
- /fix\/.*/ - /fix\/.*/
- /pr\/.*/ - /pr\/.*/
skip_commits:
files:
- LICENSE
- meta/*
- README.md
matrix: matrix:
fast_finish: false fast_finish: false
# Adding MAYFAIL to any matrix job allows it to fail but the build stays green: # 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_CXXSTD: 14,17
B2_TOOLSET: msvc-14.1 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) - FLAVOR: cygwin (32-bit)
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
ADDPATH: C:\cygwin\bin; ADDPATH: C:\cygwin\bin;
@@ -88,20 +84,6 @@ environment:
B2_CXXSTD: 03,11,14,1z B2_CXXSTD: 03,11,14,1z
B2_TOOLSET: gcc 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: install:
- git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned - git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned
# Copy ci folder if not testing Boost.CI # Copy ci folder if not testing Boost.CI
+31 -609
View File
@@ -1,4 +1,20 @@
name: CI #
# Copyright 2020-2021 Peter Dimov
# Copyright 2021 Andrey Semashev
# Copyright 2021-2024 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)
#
# This workflow uses the Boost.CI reusable workflow which builds a variety of
# configurations of your project, runs tests, and generates code coverage reports.
#
# To use it, copy this file into your repository as `.github/workflows/ci.yml` and
# customize it appropriately.
#
---
name: Boost.CI
on: on:
pull_request: pull_request:
@@ -6,614 +22,20 @@ on:
branches: branches:
- master - master
- develop - develop
- bugfix/**
- feature/** - feature/**
- fix/**
env: - pr/**
UBSAN_OPTIONS: print_stacktrace=1 paths-ignore:
- LICENSE
- meta/**
- README.md
jobs: jobs:
posix: call-boost-ci:
strategy: name: Run Boost.CI
fail-fast: false uses: boostorg/boost-ci/.github/workflows/reusable.yml@master
matrix: secrets:
include: CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- toolset: gcc-4.8 COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }}
cxxstd: "03,11" COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }}
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}}
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++
- 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
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} 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,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
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: 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: 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-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 -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
run: |
cd ../boost-root/__build__
ctest --output-on-failure --no-tests=error
windows-cmake-subdir:
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: 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 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-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/__build__
ctest --output-on-failure --no-tests=error -C Release
-11
View File
@@ -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 ;
+10 -9
View File
@@ -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 ### 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 ### Properties
@@ -11,10 +11,11 @@ Distributed under the [Boost Software License, Version 1.0](http://www.boost.org
### Build Status ### Build Status
Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | <!-- boost-ci/tools/makebadges.sh --project mpl --appveyor 49kygihpsvv2sps0 --codecov 31bBblRchG --coverity 15866 -->
:-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- | | 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) | [`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 ### Directories
@@ -27,8 +28,8 @@ Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs |
### More information ### 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. * [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). * 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](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. * 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.
+29
View File
@@ -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>include
;
explicit
[ alias boost_mpl : : : : <library>$(boost_dependencies) ]
[ alias all : boost_mpl example test ]
;
call-if : boost-library mpl
;
+3 -1
View File
@@ -7,9 +7,11 @@
import testing ; import testing ;
project : requirements <library>/boost/mpl//boost_mpl ;
test-suite "mpl-examples" test-suite "mpl-examples"
: [ run inherit_linearly.cpp ] : [ run inherit_linearly.cpp ]
[ compile integer.cpp ] [ compile integer.cpp ]
[ run tuple_from_list.cpp ] [ run tuple_from_list.cpp : : : <library>/boost/tuple//boost_tuple ]
; ;
+4 -8
View File
@@ -28,26 +28,22 @@
// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)' // 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(and)'
// has to be checked in a separate condition, otherwise GCC complains // has to be checked in a separate condition, otherwise GCC complains
// about 'and' being an alternative token // about 'and' being an alternative token
#if defined(_MSC_VER) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__ #if defined(and)
#if defined(and)
# pragma push_macro("and") # pragma push_macro("and")
# undef and # undef and
# define and(x) # define and(x)
#endif #endif
#endif #endif
#endif
# define BOOST_MPL_PREPROCESSED_HEADER and.hpp # define BOOST_MPL_PREPROCESSED_HEADER and.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp> # include <boost/mpl/aux_/include_preprocessed.hpp>
#if defined(_MSC_VER) && !defined(__clang__) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__ #if defined(and)
#if defined(and)
# pragma pop_macro("and") # pragma pop_macro("and")
#endif #endif
#endif #endif
#endif
#else #else
+1 -1
View File
@@ -22,7 +22,7 @@
&& !BOOST_WORKAROUND(__EDG_VERSION__, <= 243) && !BOOST_WORKAROUND(__EDG_VERSION__, <= 243)
# include <boost/mpl/assert.hpp> # include <boost/mpl/assert.hpp>
# define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \ # define BOOST_MPL_AUX_ASSERT_NOT_NA(x) \
BOOST_MPL_ASSERT_NOT((boost::mpl::is_na<type>)) \ BOOST_MPL_ASSERT_NOT((boost::mpl::is_na<x>)) \
/**/ /**/
#else #else
# include <boost/static_assert.hpp> # include <boost/static_assert.hpp>
+1 -1
View File
@@ -39,7 +39,7 @@
namespace boost { namespace mpl { namespace aux { namespace boost { namespace mpl { namespace aux {
template< typename T > static T const& ptr_to_ref(T*); template< typename T > T const& ptr_to_ref(T*);
}}} }}}
+2 -6
View File
@@ -19,27 +19,23 @@
// macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)' // macros, see http://tinyurl.com/ycwdxco; 'defined(bitand)'
// has to be checked in a separate condition, otherwise GCC complains // has to be checked in a separate condition, otherwise GCC complains
// about 'bitand' being an alternative token // about 'bitand' being an alternative token
#if defined(_MSC_VER) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__
#if defined(bitand) #if defined(bitand)
# pragma push_macro("bitand") # pragma push_macro("bitand")
# undef bitand # undef bitand
# define bitand(x) # define bitand(x)
#endif #endif
#endif #endif
#endif
#define AUX778076_OP_NAME bitand_ #define AUX778076_OP_NAME bitand_
#define AUX778076_OP_PREFIX bitand #define AUX778076_OP_PREFIX bitand
#define AUX778076_OP_TOKEN & #define AUX778076_OP_TOKEN &
#include <boost/mpl/aux_/arithmetic_op.hpp> #include <boost/mpl/aux_/arithmetic_op.hpp>
#if defined(_MSC_VER) && !defined(__clang__) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__
#if defined(bitand) #if defined(bitand)
# pragma pop_macro("bitand") # pragma pop_macro("bitand")
#endif #endif
#endif #endif
#endif
#endif // BOOST_MPL_BITAND_HPP_INCLUDED #endif // BOOST_MPL_BITAND_HPP_INCLUDED
+2 -6
View File
@@ -19,27 +19,23 @@
// macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)' // macros, see http://tinyurl.com/ycwdxco; 'defined(bitor)'
// has to be checked in a separate condition, otherwise GCC complains // has to be checked in a separate condition, otherwise GCC complains
// about 'bitor' being an alternative token // about 'bitor' being an alternative token
#if defined(_MSC_VER) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__
#if defined(bitor) #if defined(bitor)
# pragma push_macro("bitor") # pragma push_macro("bitor")
# undef bitor # undef bitor
# define bitor(x) # define bitor(x)
#endif #endif
#endif #endif
#endif
#define AUX778076_OP_NAME bitor_ #define AUX778076_OP_NAME bitor_
#define AUX778076_OP_PREFIX bitor #define AUX778076_OP_PREFIX bitor
#define AUX778076_OP_TOKEN | #define AUX778076_OP_TOKEN |
#include <boost/mpl/aux_/arithmetic_op.hpp> #include <boost/mpl/aux_/arithmetic_op.hpp>
#if defined(_MSC_VER) && !defined(__clang__) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__
#if defined(bitor) #if defined(bitor)
# pragma pop_macro("bitor") # pragma pop_macro("bitor")
#endif #endif
#endif #endif
#endif
#endif // BOOST_MPL_BITOR_HPP_INCLUDED #endif // BOOST_MPL_BITOR_HPP_INCLUDED
+2 -6
View File
@@ -29,26 +29,22 @@
// 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)' // 'or' and 'and' macros, see http://tinyurl.com/3et69; 'defined(or)'
// has to be checked in a separate condition, otherwise GCC complains // has to be checked in a separate condition, otherwise GCC complains
// about 'or' being an alternative token // about 'or' being an alternative token
#if defined(_MSC_VER) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__
#if defined(or) #if defined(or)
# pragma push_macro("or") # pragma push_macro("or")
# undef or # undef or
# define or(x) # define or(x)
#endif #endif
#endif #endif
#endif
# define BOOST_MPL_PREPROCESSED_HEADER or.hpp # define BOOST_MPL_PREPROCESSED_HEADER or.hpp
# include <boost/mpl/aux_/include_preprocessed.hpp> # include <boost/mpl/aux_/include_preprocessed.hpp>
#if defined(_MSC_VER) && !defined(__clang__) #if defined(_MSC_EXTENSIONS)
#ifndef __GCCXML__
#if defined(or) #if defined(or)
# pragma pop_macro("or") # pragma pop_macro("or")
#endif #endif
#endif #endif
#endif
#else #else
+5 -5
View File
@@ -5,12 +5,12 @@ Pre-processing of MPL-containers can be accomplished using the script
"boost_mpl_preprocess.py". In the simple case call it with a single "boost_mpl_preprocess.py". In the simple case call it with a single
argument which is the path to the source-directory of Boost. argument which is the path to the source-directory of Boost.
python boost_mpl_preprocess.py <path-to-boost-sourcedir> python3 boost_mpl_preprocess.py <path-to-boost-sourcedir>
If the Boost source-directory is the one this script resides in, you If the Boost source-directory is the one this script resides in, you
can just call it without any arguments. can just call it without any arguments.
python boost_mpl_preprocess.py python3 boost_mpl_preprocess.py
Either way, this will pre-process all four MPL-container types (vector, Either way, this will pre-process all four MPL-container types (vector,
list, set, map) and makes them able to hold up to 100 elements. They can list, set, map) and makes them able to hold up to 100 elements. They can
@@ -22,7 +22,7 @@ be different from the one of other MPL-container types and it can also
differ between its 'numbered' and 'variadic' form. differ between its 'numbered' and 'variadic' form.
To see all options, call the script like this: To see all options, call the script like this:
python boost_mpl_preprocess.py --help python3 boost_mpl_preprocess.py --help
Fixing pre-processing of MPL-containers Fixing pre-processing of MPL-containers
@@ -44,12 +44,12 @@ can also fix them explicitly by calling "fix_boost_mpl_preprocess.py"
directly. directly.
If you just want to test if any fixing is needed call it like this: If you just want to test if any fixing is needed call it like this:
python fix_boost_mpl_preprocess.py --check-only <path-to-boost-sourcedir> python3 fix_boost_mpl_preprocess.py --check-only <path-to-boost-sourcedir>
This will tell you if any fixing is needed. In such a case call the script This will tell you if any fixing is needed. In such a case call the script
"fix_boost_mpl_preprocess.py" like this: "fix_boost_mpl_preprocess.py" like this:
python fix_boost_mpl_preprocess.py <path-to-boost-sourcedir> python3 fix_boost_mpl_preprocess.py <path-to-boost-sourcedir>
This will fix the header-comments of all the source-files needed during This will fix the header-comments of all the source-files needed during
pre-processing. Calling "boost_mpl_preprocess.py" afterwards should then pre-processing. Calling "boost_mpl_preprocess.py" afterwards should then
+37 -32
View File
@@ -29,7 +29,7 @@ def create_more_container_files(sourceDir, suffix, maxElements, containers, cont
newFile = os.path.join( sourceDir, container, container + str(i+10) + suffix ) newFile = os.path.join( sourceDir, container, container + str(i+10) + suffix )
shutil.copyfile( os.path.join( sourceDir, container, container + "20" + suffix ), newFile ) shutil.copyfile( os.path.join( sourceDir, container, container + "20" + suffix ), newFile )
# Adjust copy of "template"-file accordingly. # Adjust copy of "template"-file accordingly.
for line in fileinput.input( newFile, inplace=1, mode="rU" ): for line in fileinput.input( newFile, inplace=1, mode="r" ):
line = re.sub(r'20', '%TWENTY%', line.rstrip()) line = re.sub(r'20', '%TWENTY%', line.rstrip())
line = re.sub(r'11', '%ELEVEN%', line.rstrip()) line = re.sub(r'11', '%ELEVEN%', line.rstrip())
line = re.sub(r'10(?![0-9])', '%TEN%', line.rstrip()) line = re.sub(r'10(?![0-9])', '%TEN%', line.rstrip())
@@ -43,7 +43,7 @@ def create_more_container_files(sourceDir, suffix, maxElements, containers, cont
newFile = os.path.join( sourceDir, container, container + str(i+10) + "_c" + suffix ) newFile = os.path.join( sourceDir, container, container + str(i+10) + "_c" + suffix )
shutil.copyfile( os.path.join( sourceDir, container, container + "20_c" + suffix ), newFile ) shutil.copyfile( os.path.join( sourceDir, container, container + "20_c" + suffix ), newFile )
# Adjust copy of "template"-file accordingly. # Adjust copy of "template"-file accordingly.
for line in fileinput.input( newFile, inplace=1, mode="rU" ): for line in fileinput.input( newFile, inplace=1, mode="r" ):
line = re.sub(r'20', '%TWENTY%', line.rstrip()) line = re.sub(r'20', '%TWENTY%', line.rstrip())
line = re.sub(r'11', '%ELEVEN%', line.rstrip()) line = re.sub(r'11', '%ELEVEN%', line.rstrip())
line = re.sub(r'10(?![0-9])', '%TEN%', line.rstrip()) line = re.sub(r'10(?![0-9])', '%TEN%', line.rstrip())
@@ -73,7 +73,7 @@ def adjust_container_limits_for_variadic_sequences(headerDir, containers, maxEle
headerFile = os.path.join( headerDir, "limits", container + ".hpp" ) headerFile = os.path.join( headerDir, "limits", container + ".hpp" )
regexMatch = r'(define\s+BOOST_MPL_LIMIT_' + container.upper() + r'_SIZE\s+)[0-9]+' regexMatch = r'(define\s+BOOST_MPL_LIMIT_' + container.upper() + r'_SIZE\s+)[0-9]+'
regexReplace = r'\g<1>' + re.escape( str(maxElements) ) regexReplace = r'\g<1>' + re.escape( str(maxElements) )
for line in fileinput.input( headerFile, inplace=1, mode="rU" ): for line in fileinput.input( headerFile, inplace=1, mode="r" ):
line = re.sub(regexMatch, regexReplace, line.rstrip()) line = re.sub(regexMatch, regexReplace, line.rstrip())
print(line) print(line)
@@ -118,6 +118,11 @@ def to_existing_absolute_path(string):
def main(): def main():
"""The main function.""" """The main function."""
# Determine the currently running python executable.
python_executable = sys.executable
if python_executable == None or python_executable == "":
python_executable = python
# Find the current Boost source-directory in which this script is located. # Find the current Boost source-directory in which this script is located.
sourceDir = current_boost_dir() sourceDir = current_boost_dir()
if sourceDir == None: if sourceDir == None:
@@ -150,19 +155,19 @@ def main():
# Some verbose debug output. # Some verbose debug output.
if args.verbose: if args.verbose:
print "Arguments extracted from command-line:" print("Arguments extracted from command-line:")
print " verbose = ", args.verbose print(" verbose = ", args.verbose)
print " source directory = ", args.sourceDir print(" source directory = ", args.sourceDir)
print " num elements = ", args.numElements print(" num elements = ", args.numElements)
print " sequence type = ", args.seqType print(" sequence type = ", args.seqType)
print " want: vector = ", args.want_vector print(" want: vector = ", args.want_vector)
print " want: list = ", args.want_list print(" want: list = ", args.want_list)
print " want: set = ", args.want_set print(" want: set = ", args.want_set)
print " want: map = ", args.want_map print(" want: map = ", args.want_map)
# Verify that we received any source-directory. # Verify that we received any source-directory.
if args.sourceDir == None: if args.sourceDir == None:
print "You should specify a valid path to the Boost source-directory." print("You should specify a valid path to the Boost source-directory.")
sys.exit(0) sys.exit(0)
# The directories for header- and source files of Boost.MPL. # The directories for header- and source files of Boost.MPL.
@@ -177,13 +182,13 @@ def main():
sourceDir = os.path.join( args.sourceDir, "preprocessed" ) sourceDir = os.path.join( args.sourceDir, "preprocessed" )
if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ): if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ):
cmdlineParser.print_usage() cmdlineParser.print_usage()
print "error: Cannot find Boost.MPL header/source files in given Boost source-directory!" print("error: Cannot find Boost.MPL header/source files in given Boost source-directory!")
sys.exit(0) sys.exit(0)
# Some verbose debug output. # Some verbose debug output.
if args.verbose: if args.verbose:
print "Chosen header-directory: ", headerDir print("Chosen header-directory: ", headerDir)
print "Chosen source-directory: ", sourceDir print("Chosen source-directory: ", sourceDir)
# Create list of containers for which files shall be pre-processed. # Create list of containers for which files shall be pre-processed.
containers = [] containers = []
@@ -196,23 +201,23 @@ def main():
if args.want_map: if args.want_map:
containers.append('map') containers.append('map')
if containers == []: if containers == []:
print "Nothing to do." print("Nothing to do.")
print "(Why did you prevent generating pre-processed headers for all Boost.MPL container types?)" print("(Why did you prevent generating pre-processed headers for all Boost.MPL container types?)")
sys.exit(0) sys.exit(0)
# Possibly fix the header-comments of input-files needed for pre-processing. # Possibly fix the header-comments of input-files needed for pre-processing.
if args.verbose: if args.verbose:
print "Checking if prior to pre-processing some input-files need fixing." print("Checking if prior to pre-processing some input-files need fixing.")
needFixing = fixmpl.check_input_files(headerDir, sourceDir, containers, args.seqType, args.verbose) needFixing = fixmpl.check_input_files(headerDir, sourceDir, containers, args.seqType, args.verbose)
if needFixing: if needFixing:
if args.verbose: if args.verbose:
print "Fixing of some input-files prior to pre-processing is needed." print("Fixing of some input-files prior to pre-processing is needed.")
print "Will fix them now!" print("Will fix them now!")
fixmpl.fix_input_files(headerDir, sourceDir, containers, args.seqType, args.verbose) fixmpl.fix_input_files(headerDir, sourceDir, containers, args.seqType, args.verbose)
# Some verbose debug output. # Some verbose debug output.
if args.verbose: if args.verbose:
print "Containers for which to pre-process headers: ", containers print("Containers for which to pre-process headers: ", containers)
# Create (additional) input files for generating pre-processed headers of numbered sequence MPL containers. # Create (additional) input files for generating pre-processed headers of numbered sequence MPL containers.
if args.seqType == "both" or args.seqType == "numbered": if args.seqType == "both" or args.seqType == "numbered":
@@ -226,24 +231,24 @@ def main():
if args.seqType == "both" or args.seqType == "numbered": if args.seqType == "both" or args.seqType == "numbered":
if args.want_vector: if args.want_vector:
if args.verbose: if args.verbose:
print "Pre-process headers for Boost.MPL numbered vectors." print("Pre-process headers for Boost.MPL numbered vectors.")
os.system( "python " + os.path.join( sourceDir, "preprocess_vector.py" ) + " all " + args.sourceDir ) os.system( python_executable + " " + os.path.join( sourceDir, "preprocess_vector.py" ) + " all " + args.sourceDir )
if args.want_list: if args.want_list:
if args.verbose: if args.verbose:
print "Pre-process headers for Boost.MPL numbered lists." print("Pre-process headers for Boost.MPL numbered lists.")
os.system( "python " + os.path.join( sourceDir, "preprocess_list.py" ) + " all " + args.sourceDir ) os.system( python_executable + " " + os.path.join( sourceDir, "preprocess_list.py" ) + " all " + args.sourceDir )
if args.want_set: if args.want_set:
if args.verbose: if args.verbose:
print "Pre-process headers for Boost.MPL numbered sets." print("Pre-process headers for Boost.MPL numbered sets.")
os.system( "python " + os.path.join( sourceDir, "preprocess_set.py" ) + " all " + args.sourceDir ) os.system( python_executable + " " + os.path.join( sourceDir, "preprocess_set.py" ) + " all " + args.sourceDir )
if args.want_map: if args.want_map:
if args.verbose: if args.verbose:
print "Pre-process headers for Boost.MPL numbered maps." print("Pre-process headers for Boost.MPL numbered maps.")
os.system( "python " + os.path.join( sourceDir, "preprocess_map.py" ) + " all " + args.sourceDir ) os.system( python_executable + " " + os.path.join( sourceDir, "preprocess_map.py" ) + " all " + args.sourceDir )
if args.seqType == "both" or args.seqType == "variadic": if args.seqType == "both" or args.seqType == "variadic":
if args.verbose: if args.verbose:
print "Pre-process headers for Boost.MPL variadic containers." print("Pre-process headers for Boost.MPL variadic containers.")
os.system( "python " + os.path.join( sourceDir, "preprocess.py" ) + " all " + args.sourceDir ) os.system( python_executable + " " + os.path.join( sourceDir, "preprocess.py" ) + " all " + args.sourceDir )
if __name__ == '__main__': if __name__ == '__main__':
+19 -19
View File
@@ -21,7 +21,7 @@ def check_header_comment(filename):
# Check input file. # Check input file.
name = os.path.basename( filename ) name = os.path.basename( filename )
# Read content of input file. # Read content of input file.
sourcefile = open( filename, "rU" ) sourcefile = open( filename, "r" )
content = sourcefile.read() content = sourcefile.read()
sourcefile.close() sourcefile.close()
# Search content for '$Id$'. # Search content for '$Id$'.
@@ -66,26 +66,26 @@ def check_input_files(headerDir, sourceDir, containers=['vector', 'list', 'set',
result1 = False result1 = False
if seqType == "both" or seqType == "variadic": if seqType == "both" or seqType == "variadic":
if verbose: if verbose:
print "Check if input files for pre-processing Boost.MPL variadic containers need fixing." print("Check if input files for pre-processing Boost.MPL variadic containers need fixing.")
result1 = check_input_files_for_variadic_seq(headerDir, sourceDir) result1 = check_input_files_for_variadic_seq(headerDir, sourceDir)
if verbose: if verbose:
if result1: if result1:
print " At least one input file needs fixing!" print(" At least one input file needs fixing!")
else: else:
print " No input file needs fixing!" print(" No input file needs fixing!")
# Check the input files for containers in their numbered form. # Check the input files for containers in their numbered form.
result2 = False result2 = False
result3 = False result3 = False
if seqType == "both" or seqType == "numbered": if seqType == "both" or seqType == "numbered":
if verbose: if verbose:
print "Check input files for pre-processing Boost.MPL numbered containers." print("Check input files for pre-processing Boost.MPL numbered containers.")
result2 = check_input_files_for_numbered_seq(headerDir, ".hpp", containers) result2 = check_input_files_for_numbered_seq(headerDir, ".hpp", containers)
result3 = check_input_files_for_numbered_seq(sourceDir, ".cpp", containers) result3 = check_input_files_for_numbered_seq(sourceDir, ".cpp", containers)
if verbose: if verbose:
if result2 or result3: if result2 or result3:
print " At least one input file needs fixing!" print(" At least one input file needs fixing!")
else: else:
print " No input file needs fixing!" print(" No input file needs fixing!")
# Return result. # Return result.
return result1 or result2 or result3 return result1 or result2 or result3
@@ -93,7 +93,7 @@ def fix_header_comment(filename, timestamp):
"""Fixes the header-comment of the given file.""" """Fixes the header-comment of the given file."""
# Fix input file. # Fix input file.
name = os.path.basename( filename ) name = os.path.basename( filename )
for line in fileinput.input( filename, inplace=1, mode="rU" ): for line in fileinput.input( filename, inplace=1, mode="r" ):
# If header-comment already contains anything for '$Id$', remove it. # If header-comment already contains anything for '$Id$', remove it.
line = re.sub(r'\$Id:[^$]+\$', r'$Id$', line.rstrip()) line = re.sub(r'\$Id:[^$]+\$', r'$Id$', line.rstrip())
# Replace '$Id$' by a string containing the file's name (and a timestamp)! # Replace '$Id$' by a string containing the file's name (and a timestamp)!
@@ -128,12 +128,12 @@ def fix_input_files(headerDir, sourceDir, containers=['vector', 'list', 'set', '
# Fix the input files for containers in their variadic form. # Fix the input files for containers in their variadic form.
if seqType == "both" or seqType == "variadic": if seqType == "both" or seqType == "variadic":
if verbose: if verbose:
print "Fix input files for pre-processing Boost.MPL variadic containers." print("Fix input files for pre-processing Boost.MPL variadic containers.")
fix_input_files_for_variadic_seq(headerDir, sourceDir, timestamp) fix_input_files_for_variadic_seq(headerDir, sourceDir, timestamp)
# Fix the input files for containers in their numbered form. # Fix the input files for containers in their numbered form.
if seqType == "both" or seqType == "numbered": if seqType == "both" or seqType == "numbered":
if verbose: if verbose:
print "Fix input files for pre-processing Boost.MPL numbered containers." print("Fix input files for pre-processing Boost.MPL numbered containers.")
fix_input_files_for_numbered_seq(headerDir, ".hpp", timestamp, containers) fix_input_files_for_numbered_seq(headerDir, ".hpp", timestamp, containers)
fix_input_files_for_numbered_seq(sourceDir, ".cpp", timestamp, containers) fix_input_files_for_numbered_seq(sourceDir, ".cpp", timestamp, containers)
@@ -164,10 +164,10 @@ def main():
# Some verbose debug output. # Some verbose debug output.
if args.verbose: if args.verbose:
print "Arguments extracted from command-line:" print("Arguments extracted from command-line:")
print " verbose = ", args.verbose print(" verbose = ", args.verbose)
print " check-only = ", args.checkonly print(" check-only = ", args.checkonly)
print " source directory = ", args.sourceDir print(" source directory = ", args.sourceDir)
# The directories for header- and source files of Boost.MPL. # The directories for header- and source files of Boost.MPL.
# NOTE: Assuming 'args.sourceDir' is the source-directory of the entire boost project. # NOTE: Assuming 'args.sourceDir' is the source-directory of the entire boost project.
@@ -181,21 +181,21 @@ def main():
sourceDir = os.path.join( args.sourceDir, "preprocessed" ) sourceDir = os.path.join( args.sourceDir, "preprocessed" )
if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ): if not os.path.exists( headerDir ) or not os.path.exists( sourceDir ):
cmdlineParser.print_usage() cmdlineParser.print_usage()
print "error: Cannot find Boost.MPL header/source files in given Boost source-directory!" print("error: Cannot find Boost.MPL header/source files in given Boost source-directory!")
sys.exit(0) sys.exit(0)
# Some verbose debug output. # Some verbose debug output.
if args.verbose: if args.verbose:
print "Chosen header-directory: ", headerDir print("Chosen header-directory: ", headerDir)
print "Chosen source-directory: ", sourceDir print("Chosen source-directory: ", sourceDir)
if args.checkonly: if args.checkonly:
# Check input files for generating pre-processed headers. # Check input files for generating pre-processed headers.
result = check_input_files(headerDir, sourceDir, verbose = args.verbose) result = check_input_files(headerDir, sourceDir, verbose = args.verbose)
if result: if result:
print "Fixing the input-files used for pre-processing of Boost.MPL headers IS required." print("Fixing the input-files used for pre-processing of Boost.MPL headers IS required.")
else: else:
print "Fixing the input-files used for pre-processing of Boost.MPL headers is NOT required." print("Fixing the input-files used for pre-processing of Boost.MPL headers is NOT required.")
else: else:
# Fix input files for generating pre-processed headers. # Fix input files for generating pre-processed headers.
fix_input_files(headerDir, sourceDir, verbose = args.verbose) fix_input_files(headerDir, sourceDir, verbose = args.verbose)
+12 -13
View File
@@ -12,6 +12,7 @@
# $Revision$ # $Revision$
import fileinput import fileinput
import functools
import os import os
import re import re
import string import string
@@ -22,22 +23,21 @@ max_len = 79
ident = 4 ident = 4
def nearest_ident_pos(text): def nearest_ident_pos(text):
return (len(text)/ident) * ident return int((len(text)/ident) * ident)
def block_format(limits, text, first_sep=' ', sep=',', need_last_ident=1 ): def block_format(limits, text, first_sep=' ', sep=',', need_last_ident=1 ):
if sep == ',' and string.find( text, '<' ) != -1: if sep == ',' and str.find( text, '<' ) != -1:
sep = '%s ' % sep sep = '%s ' % sep
words = string.split( words = str.split(
string.join( string.split( text ), ' ' ) ' '.join( str.split( text ) )
, sep , sep
) )
s = ' ' * limits[0] s = ' ' * limits[0]
max_len = limits[1] max_len = limits[1]
return '%s\n%s' \ return '%s\n%s' \
% ( % (
reduce( functools.reduce(
lambda t,w,max_len=max_len,s=s,sep=sep: lambda t,w,max_len=max_len,s=s,sep=sep:
if_else(t[1] + len(w) < max_len if_else(t[1] + len(w) < max_len
, ('%s%s%s'% (t[0],t[2],w), t[1]+len(w)+len(t[2]), sep) , ('%s%s%s'% (t[0],t[2],w), t[1]+len(w)+len(t[2]), sep)
@@ -52,7 +52,6 @@ def block_format(limits, text, first_sep=' ', sep=',', need_last_ident=1 ):
def handle_args( match ): def handle_args( match ):
if re.compile('^\s*(typedef|struct|static)\s+.*?$').match(match.group(0)): if re.compile('^\s*(typedef|struct|static)\s+.*?$').match(match.group(0)):
return match.group(0) return match.group(0)
return '%s'\ return '%s'\
% block_format( % block_format(
(nearest_ident_pos(match.group(1)),max_len) (nearest_ident_pos(match.group(1)),max_len)
@@ -86,7 +85,7 @@ def handle_inline_args(match):
(nearest_ident_pos(match.group(1))+ident,max_len-len(match.group(9))) (nearest_ident_pos(match.group(1))+ident,max_len-len(match.group(9)))
, match.group(4) , match.group(4)
) )
, string.replace(match.group(1),',',' ') , str.replace(match.group(1),',',' ')
, match.group(9) , match.group(9)
) )
@@ -98,18 +97,18 @@ def handle_simple_list(match):
return if_else(single_arg,'%s<%s>','%s< %s >') %\ return if_else(single_arg,'%s<%s>','%s< %s >') %\
( (
match.group(1) match.group(1)
, string.join(string.split(match.group(2)), '') , ''.join(str.split(match.group(2)))
) )
def handle_static(match): def handle_static(match):
if len(match.group(0)) < max_len: if len(match.group(0)) < max_len:
return match.group(0) return match.group(0)
(first_sep,sep) = if_else(string.find(match.group(0),'+') == -1, (' ',' '),(' ','+')) (first_sep,sep) = if_else(str.find(match.group(0),'+') == -1, (' ',' '),(' ','+'))
return '%s%s\n%s%s' %\ return '%s%s\n%s%s' %\
( (
match.group(1) match.group(1)
, string.join(string.split(match.group(2)), ' ') , ' '.join(str.split(match.group(2)))
, block_format( , block_format(
(nearest_ident_pos(match.group(1))+ident,max_len) (nearest_ident_pos(match.group(1))+ident,max_len)
, match.group(4) , match.group(4)
@@ -120,7 +119,7 @@ def handle_static(match):
) )
def handle_typedefs(match): def handle_typedefs(match):
if string.count(match.group(2), ';') == 1: if str.count(match.group(2), ';') == 1:
return match.group(0) return match.group(0)
join_sep = ';\n%s' % match.group(1) join_sep = ';\n%s' % match.group(1)
@@ -128,7 +127,7 @@ def handle_typedefs(match):
return '%s%s\n' \ return '%s%s\n' \
% ( % (
match.group(1) match.group(1)
, string.join(map(string.strip, string.split(match.group(2), ';')), join_sep) , join_sep.join(list(map(str.strip, str.split(match.group(2), ';'))))
) )
def fix_angle_brackets( match ): def fix_angle_brackets( match ):
+4 -4
View File
@@ -57,10 +57,10 @@ def process_all( root, boost_root, dst_dir, mode ):
def main( all_modes, src_dir, dst_dir ): def main( all_modes, src_dir, dst_dir ):
if len( sys.argv ) < 2: if len( sys.argv ) < 2:
print "\nUsage:\n\t %s <mode> <boost_root> [<source_file>]" % os.path.basename( sys.argv[0] ) print("\nUsage:\n\t %s <mode> <boost_root> [<source_file>]" % os.path.basename( sys.argv[0] ))
print "\nPurpose:\n\t updates preprocessed version(s) of the header(s) in \"%s\" directory" % dst_dir print("\nPurpose:\n\t updates preprocessed version(s) of the header(s) in \"%s\" directory" % dst_dir)
print "\nExample:\n\t the following command will re-generate and update all 'apply.hpp' headers:" print("\nExample:\n\t the following command will re-generate and update all 'apply.hpp' headers:")
print "\n\t\t %s all f:\\cvs\\boost apply.cpp" % os.path.basename( sys.argv[0] ) print("\n\t\t %s all f:\\cvs\\boost apply.cpp" % os.path.basename( sys.argv[0] ))
sys.exit( -1 ) sys.exit( -1 )
if sys.argv[1] == "all": if sys.argv[1] == "all":
+8 -4
View File
@@ -1,5 +1,6 @@
project project
: requirements : requirements
<library>/boost/mpl//boost_mpl
<warnings>extra <warnings>extra
<toolset>clang:<cxxflags>-Wno-variadic-macros <toolset>clang:<cxxflags>-Wno-variadic-macros
<toolset>gcc:<cxxflags>-Wshadow <toolset>gcc:<cxxflags>-Wshadow
@@ -49,7 +50,8 @@ compile find.cpp ;
compile find_if.cpp ; compile find_if.cpp ;
compile fold.cpp ; compile fold.cpp ;
run for_each.cpp run for_each.cpp
: : : <cxxstd>98:<build>no <cxxstd>03:<build>no ; : : : <cxxstd>98:<build>no <cxxstd>03:<build>no
<library>/boost/bind//boost_bind ;
compile front.cpp ; compile front.cpp ;
compile get_tag_def.cpp ; compile get_tag_def.cpp ;
compile has_xxx.cpp ; compile has_xxx.cpp ;
@@ -60,9 +62,10 @@ compile inherit.cpp ;
compile insert.cpp ; compile insert.cpp ;
compile insert_range.cpp ; compile insert_range.cpp ;
run int.cpp ; run int.cpp ;
run char.cpp ; run char.cpp : : : : char ;
run integral_c.cpp run char.cpp : : : <toolset>gcc:<cxxflags>"-funsigned-char -Wnarrowing -Werror" : char_unsigned ;
: : : <toolset>vacpp:<cxxflags>-qchars=signed ; run integral_c.cpp : : : <toolset>vacpp:<cxxflags>-qchars=signed : integral_c ;
run integral_c.cpp : : : <toolset>gcc:<cxxflags>"-funsigned-char -Wnarrowing -Werror" : integral_c_unsigned ;
compile is_placeholder.cpp ; compile is_placeholder.cpp ;
compile is_sequence.cpp ; compile is_sequence.cpp ;
compile iterator_tags.cpp ; compile iterator_tags.cpp ;
@@ -112,3 +115,4 @@ compile zip_view.cpp ;
run string.cpp ; run string.cpp ;
run issue_69.cpp ; run issue_69.cpp ;
run issue_84.cpp ;
+5
View File
@@ -13,12 +13,17 @@
#include <boost/mpl/char.hpp> #include <boost/mpl/char.hpp>
#include <boost/preprocessor/repeat.hpp> #include <boost/preprocessor/repeat.hpp>
#include <climits>
#include "integral_wrapper_test.hpp" #include "integral_wrapper_test.hpp"
MPL_TEST_CASE() MPL_TEST_CASE()
{ {
#if CHAR_MAX > 0
# define WRAPPER(T, i) char_<static_cast<char>(i)>
#else
# define WRAPPER(T, i) char_<i> # define WRAPPER(T, i) char_<i>
#endif
BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, char) BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, char)
} }
+8 -3
View File
@@ -13,6 +13,7 @@
#include <boost/mpl/integral_c.hpp> #include <boost/mpl/integral_c.hpp>
#include <boost/preprocessor/repeat.hpp> #include <boost/preprocessor/repeat.hpp>
#include <climits>
#include "integral_wrapper_test.hpp" #include "integral_wrapper_test.hpp"
@@ -21,10 +22,14 @@ MPL_TEST_CASE()
{ {
# define WRAPPER(T, i) integral_c<T,i> # define WRAPPER(T, i) integral_c<T,i>
#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, short)
BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, int) BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, int)
BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, long) BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, long)
#if CHAR_MAX > 0
# undef WRAPPER
# define WRAPPER(T, i) integral_c<T,static_cast<T>(i)>
#endif
BOOST_PP_REPEAT(10, INTEGRAL_WRAPPER_TEST, char)
} }
+15
View File
@@ -0,0 +1,15 @@
// Copyright 2025 Peter Dimov
// Distributed under the Boost Software License, Version 1.0.
// https://www.boost.org/LICENSE_1_0.txt
// Check for conflicts with MS iso646.h, which defines macros for `and` et al
#include <ciso646>
#include <boost/mpl/and.hpp>
#include <boost/mpl/or.hpp>
#include <boost/mpl/bitand.hpp>
#include <boost/mpl/bitor.hpp>
int main()
{
}