From d2a7368cbf828b4ba67e1938335b1fca202a0697 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 11:37:54 -0700 Subject: [PATCH 01/11] Try out boost-ci reusable flow --- .github/workflows/ci.yml | 298 +++++---------------------------------- 1 file changed, 34 insertions(+), 264 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d1df1076..9d5ed994 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,23 @@ -name: GitHub Actions CI +# +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2021-2026 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.Wave + +permissions: + contents: read on: pull_request: @@ -6,271 +25,22 @@ on: branches: - master - develop - - githubactions* + - bugfix/** - feature/** - fix/** + - github/** - pr/** + paths-ignore: + - LICENSE + - meta/** + - README.md jobs: - posix: - strategy: - fail-fast: false - matrix: - include: - - name: "TOOLSET=gcc CXXSTD=11 Job 0" - buildtype: "boost" - packages: "" - packages_to_remove: "" - os: ubuntu-latest - container: "ubuntu:16.04" - cxx: "g++" - sources: "" - llvm_os: "" - llvm_ver: "" - toolset: "gcc" - cxxstd: "11" - - name: "TOOLSET=gcc-5 CXXSTD=11,14,1z Job 1" - buildtype: "boost" - packages: "g++-5" - packages_to_remove: "" - os: ubuntu-latest - container: "ubuntu:16.04" - cxx: "g++-5" - sources: "" - llvm_os: "" - llvm_ver: "" - toolset: "gcc-5" - cxxstd: "11,14,1z" - - name: "TOOLSET=gcc-6 CXXSTD=11,14,1z Job 2" - buildtype: "boost" - packages: "g++-6" - packages_to_remove: "" - os: ubuntu-latest - container: "ubuntu:16.04" - cxx: "g++-6" - sources: "" - llvm_os: "" - llvm_ver: "" - toolset: "gcc-6" - cxxstd: "11,14,1z" - - name: "TOOLSET=gcc-7 CXXSTD=11,14,17 Job 3" - buildtype: "boost" - packages: "g++-7" - packages_to_remove: "" - os: ubuntu-latest - container: "ubuntu:16.04" - cxx: "g++-7" - sources: "" - llvm_os: "" - llvm_ver: "" - toolset: "gcc-7" - cxxstd: "11,14,17" - - name: "TOOLSET=gcc-9 CXXSTD=11,14,17,20 Job 6" - buildtype: "boost" - packages: "g++-9" - packages_to_remove: "" - os: ubuntu-latest - container: "ubuntu:16.04" - cxx: "g++-9" - sources: "" - llvm_os: "" - llvm_ver: "" - toolset: "gcc-9" - cxxstd: "11,14,17,20" - - name: "TOOLSET=clang CXXSTD=11,14,17,20 Job 4" - buildtype: "boost" - packages: "" - packages_to_remove: "" - os: "ubuntu-24.04" - cxx: "clang++" - sources: "" - llvm_os: "" - llvm_ver: "" - toolset: "clang" - cxxstd: "11,14,17,20" - - runs-on: ${{ matrix.os }} - container: - image: ${{matrix.container}} - volumes: - - /node20217:/node20217:rw,rshared - - ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }} - - steps: - - - name: Check if running in container - if: matrix.container != '' - run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV - - name: If running in container, upgrade packages - if: matrix.container != '' - run: | - apt-get -o Acquire::Retries=3 update && DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata && apt-get -o Acquire::Retries=3 install -y sudo software-properties-common wget curl apt-transport-https make apt-file sudo unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python ruby cpio gcc-multilib g++-multilib pkgconf python3 ccache libpython-dev - sudo apt-add-repository ppa:git-core/ppa - sudo apt-get -o Acquire::Retries=3 update && apt-get -o Acquire::Retries=3 -y install git - python_version=$(python3 -c 'import sys; print("{0.major}.{0.minor}".format(sys.version_info))') - sudo wget https://bootstrap.pypa.io/pip/$python_version/get-pip.py - sudo python3 get-pip.py - sudo /usr/local/bin/pip install cmake - # 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 - - - uses: actions/checkout@v4 - env: - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true - - - name: linux - shell: bash - env: - CXX: ${{ matrix.cxx }} - SOURCES: ${{ matrix.sources }} - LLVM_OS: ${{ matrix.llvm_os }} - LLVM_VER: ${{ matrix.llvm_ver }} - PACKAGES: ${{ matrix.packages }} - PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }} - JOB_BUILDTYPE: ${{ matrix.buildtype }} - TOOLSET: ${{ matrix.toolset }} - CXXSTD: ${{ matrix.cxxstd }} - TRAVIS_BRANCH: ${{ github.base_ref }} - TRAVIS_OS_NAME: "linux" - run: | - echo '==================================> SETUP' - echo '==================================> PACKAGES' - set -e - if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi - echo ">>>>> APT: REPO.." - for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done - - if test -n "${LLVM_OS}" ; then - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - if test -n "${LLVM_VER}" ; then - sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main" - else - # Snapshot (i.e. trunk) build of clang - sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main" - fi - fi - echo ">>>>> APT: UPDATE.." - sudo -E apt-get -o Acquire::Retries=3 update - if test -n "${SOURCES}" ; then - echo ">>>>> APT: INSTALL SOURCES.." - for SOURCE in $SOURCES; do - sudo -E apt-add-repository ppa:$SOURCE - done - fi - echo ">>>>> APT: INSTALL ${PACKAGES}.." - sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES} - - echo '==================================> INSTALL AND COMPILE' - set -e - export TRAVIS_BUILD_DIR=$(pwd) - export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} - export VCS_COMMIT_ID=$GITHUB_SHA - export GIT_COMMIT=$GITHUB_SHA - export REPO_NAME=$(basename $GITHUB_REPOSITORY) - export USER=$(whoami) - export CC=${CC:-gcc} - export PATH=~/.local/bin:/usr/local/bin:$PATH - - if [ "$JOB_BUILDTYPE" == "boost" ]; then - - echo '==================================> INSTALL' - - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true - cd .. - git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root - cd boost-root - git submodule update --init tools/build - git submodule update --init libs/config - git submodule update --init tools/boostdep - cp -r $TRAVIS_BUILD_DIR/* libs/wave - python tools/boostdep/depinst/depinst.py -I tool -I samples wave - ./bootstrap.sh - ./b2 headers - - echo '==================================> SCRIPT' - - ./b2 libs/wave/test toolset=$TOOLSET cxxstd=$CXXSTD - ./b2 libs/wave/tool/build//wave toolset=$TOOLSET cxxstd=$CXXSTD - ./b2 libs/wave/samples toolset=$TOOLSET cxxstd=$CXXSTD - - fi - osx: - strategy: - fail-fast: false - matrix: - include: - - name: "TOOLSET=clang CXXSTD=11,14,17,20 Job 5" - buildtype: "boost" - packages: "" - os: "macos-15" - cxx: "clang++" - sources: "" - llvm_os: "" - llvm_ver: "" - xcode_version: 16.2.0 - toolset: "clang-16" - cxxstd: "11,14,17,20,2b" - - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v4 - - - name: Set DEVELOPER_DIR - if: matrix.xcode_version != '' - run: echo "DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode_version }}.app/Contents/Developer" >> $GITHUB_ENV - - name: Test DEVELOPER_DIR - run: echo $DEVELOPER_DIR - - - name: "osx" - shell: bash - env: - CXX: ${{ matrix.cxx }} - SOURCES: ${{ matrix.sources }} - LLVM_OS: ${{ matrix.llvm_os }} - LLVM_VER: ${{ matrix.llvm_ver }} - PACKAGES: ${{ matrix.packages }} - JOB_BUILDTYPE: ${{ matrix.buildtype }} - TOOLSET: ${{ matrix.toolset }} - CXXSTD: ${{ matrix.cxxstd }} - TRAVIS_BRANCH: ${{ github.base_ref }} - TRAVIS_OS_NAME: "osx" - run: | - echo '==================================> SETUP' - set -e - sudo mv /Library/Developer/CommandLineTools /Library/Developer/CommandLineTools.bck - echo '==================================> PACKAGES' - echo '==================================> INSTALL AND COMPILE' - set -e - export TRAVIS_BUILD_DIR=$(pwd) - export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} - export VCS_COMMIT_ID=$GITHUB_SHA - export GIT_COMMIT=$GITHUB_SHA - export REPO_NAME=$(basename $GITHUB_REPOSITORY) - export USER=$(whoami) - export CC=${CC:-gcc} - export PATH=~/.local/bin:/usr/local/bin:$PATH - - if [ "$JOB_BUILDTYPE" == "boost" ]; then - - echo '==================================> INSTALL' - - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true - cd .. - git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root - cd boost-root - git submodule update --init tools/build - git submodule update --init libs/config - git submodule update --init tools/boostdep - cp -r $TRAVIS_BUILD_DIR/* libs/wave - python tools/boostdep/depinst/depinst.py -I tool -I samples wave - ./bootstrap.sh - ./b2 headers - - echo '==================================> SCRIPT' - - ./b2 libs/wave/test toolset=$TOOLSET cxxstd=$CXXSTD - ./b2 libs/wave/tool/build//wave toolset=$TOOLSET cxxstd=$CXXSTD - ./b2 libs/wave/samples toolset=$TOOLSET cxxstd=$CXXSTD - - fi + call-boost-ci: + name: Run Boost.CI + uses: boostorg/boost-ci/.github/workflows/reusable.yml@master + # Customization: + with: + enable_reflection: true + enable_windows: false + b2_targets: test tool/build samples From 83be234afe016809e02a9c63cf24b0e6cc3eeb07 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 11:46:10 -0700 Subject: [PATCH 02/11] Fix b2_targets and disable CMake test --- .github/workflows/ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9d5ed994..48219dc9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,4 +43,5 @@ jobs: with: enable_reflection: true enable_windows: false - b2_targets: test tool/build samples + b2_targets: libs/wave/test libs/wave/tool/build libs/wave/samples + enable_cmake: false From 863fb0be0cfecb63cb969cdcf34c37a1725a2e80 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 11:55:07 -0700 Subject: [PATCH 03/11] Ensure sub-project target dependencies are listed at top level This worked in the old flow but not now... --- build.jam | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build.jam b/build.jam index 029ccd27..6241186c 100644 --- a/build.jam +++ b/build.jam @@ -22,8 +22,10 @@ constant boost_dependencies : /boost/serialization//boost_serialization /boost/smart_ptr//boost_smart_ptr /boost/spirit//boost_spirit + /boost/timer//boost_timer /boost/throw_exception//boost_throw_exception - /boost/type_traits//boost_type_traits ; + /boost/type_traits//boost_type_traits + /boost/xpressive//boost_xpressive ; project /boost/wave : common-requirements From 6a76e0e0dc72a527212bad6cfbf9bacf4b05e854 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 12:29:46 -0700 Subject: [PATCH 04/11] Supply boost/timer properly to the Wave executable for CI depinst needs to know about the source code in the tool directory --- .github/workflows/ci.yml | 1 + build.jam | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 48219dc9..2dae5845 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,3 +45,4 @@ jobs: enable_windows: false b2_targets: libs/wave/test libs/wave/tool/build libs/wave/samples enable_cmake: false + depinst_args: --include tool diff --git a/build.jam b/build.jam index 6241186c..c89b835c 100644 --- a/build.jam +++ b/build.jam @@ -22,7 +22,6 @@ constant boost_dependencies : /boost/serialization//boost_serialization /boost/smart_ptr//boost_smart_ptr /boost/spirit//boost_spirit - /boost/timer//boost_timer /boost/throw_exception//boost_throw_exception /boost/type_traits//boost_type_traits /boost/xpressive//boost_xpressive ; From 0cc547718251319a847d955bb62c651708bfe651 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 12:36:54 -0700 Subject: [PATCH 05/11] One more directory for depinst to scan --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2dae5845..ea4b2d71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,4 +45,4 @@ jobs: enable_windows: false b2_targets: libs/wave/test libs/wave/tool/build libs/wave/samples enable_cmake: false - depinst_args: --include tool + depinst_args: --include tool --include samples From 74451e11f70260539462bb0bdb34df662f651204 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 15:16:59 -0700 Subject: [PATCH 06/11] Remove mingw and early Clang versions from support - mingw doesn't like the bad filename (an explicit test) - Clang 3.* and Clang 5 seem confused about a number of things their successors are not, particularly in mp11 but also default construction --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ea4b2d71..12664285 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,3 +46,5 @@ jobs: b2_targets: libs/wave/test libs/wave/tool/build libs/wave/samples enable_cmake: false depinst_args: --include tool --include samples + enable_mingw: false + exclude_compiler: clang-3.5,clang-3.6,clang-3.7,clang-3.8,clang-5.0 From 866c637f259052ee7de431549f574a92f21314bb Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Mon, 28 Sep 2026 15:41:26 -0700 Subject: [PATCH 07/11] Enable MSVC jobs This may permit removing the Appveyor builds, which are slow --- .github/workflows/ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 12664285..e71f59d1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,6 @@ jobs: # Customization: with: enable_reflection: true - enable_windows: false b2_targets: libs/wave/test libs/wave/tool/build libs/wave/samples enable_cmake: false depinst_args: --include tool --include samples From 46c2dfda76bd357d5e5e2054a07a616a25113abf Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Tue, 29 Sep 2026 07:25:58 -0700 Subject: [PATCH 08/11] Remove windows+gcc builds Also add comments explaining some of the config choices --- .github/workflows/ci.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e71f59d1..b817c7e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -44,6 +44,8 @@ jobs: enable_reflection: true b2_targets: libs/wave/test libs/wave/tool/build libs/wave/samples enable_cmake: false - depinst_args: --include tool --include samples - enable_mingw: false - exclude_compiler: clang-3.5,clang-3.6,clang-3.7,clang-3.8,clang-5.0 + depinst_args: --include tool --include samples # fetch tool and sample dependencies + enable_mingw: false # fails on non-ASCII test filename + exclude_compiler: clang-3.5,clang-3.6,clang-3.7,clang-3.8,clang-5.0 # various compiler bugs + exclude_jobs: + type: windows, compiler: gcc # fails on non-ASCII test filename From f31e819bc94ab9aa119ad26833515318e46b1334 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Tue, 29 Sep 2026 08:32:47 -0700 Subject: [PATCH 09/11] Attempt to correct YAML syntax --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b817c7e1..3a71200c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,4 +48,4 @@ jobs: enable_mingw: false # fails on non-ASCII test filename exclude_compiler: clang-3.5,clang-3.6,clang-3.7,clang-3.8,clang-5.0 # various compiler bugs exclude_jobs: - type: windows, compiler: gcc # fails on non-ASCII test filename + 'type: windows, compiler: gcc' # fails on non-ASCII test filename From 7ac686d5f395242c2bb998eeef6fa885be7399ff Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Tue, 29 Sep 2026 11:06:35 -0700 Subject: [PATCH 10/11] Try "toolset" instead of "compiler" --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3a71200c..91fb3bf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,4 +48,4 @@ jobs: enable_mingw: false # fails on non-ASCII test filename exclude_compiler: clang-3.5,clang-3.6,clang-3.7,clang-3.8,clang-5.0 # various compiler bugs exclude_jobs: - 'type: windows, compiler: gcc' # fails on non-ASCII test filename + 'type: windows, toolset: gcc' # fails on non-ASCII test filename From 42a4cad8d688d21db6824c9cea53bcb14fb88e71 Mon Sep 17 00:00:00 2001 From: Jeff Trull Date: Tue, 29 Sep 2026 16:03:33 -0700 Subject: [PATCH 11/11] Update build badges and tweak YML format --- .github/workflows/ci.yml | 10 ++++------ README.md | 8 ++++---- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 91fb3bf3..24509eb0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,15 +3,13 @@ # Copyright 2021 Andrey Semashev # Copyright 2021-2026 Alexander Grund # Copyright 2022-2025 James E. King III +# Copyright 2026 Jeff Trull # # 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. +# configurations of a project, runs tests, and generates code coverage reports. # --- name: Boost.Wave @@ -47,5 +45,5 @@ jobs: depinst_args: --include tool --include samples # fetch tool and sample dependencies enable_mingw: false # fails on non-ASCII test filename exclude_compiler: clang-3.5,clang-3.6,clang-3.7,clang-3.8,clang-5.0 # various compiler bugs - exclude_jobs: - 'type: windows, toolset: gcc' # fails on non-ASCII test filename + exclude_jobs: >- + type: windows, toolset: gcc # fails on non-ASCII test filename diff --git a/README.md b/README.md index 8d5e313a..2003f0c7 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Boost.Wave -Branch | Appveyor (MSVC) | GitHub Actions (gcc, clang) | ----------|-----------------|-----------------------------| -Master | [![AppVeyor](https://ci.appveyor.com/api/projects/status/3v74vuhk8dwt2wr9/branch/master?svg=true)](https://ci.appveyor.com/project/jefftrull/wave/branch/master) | [![GitHub Actions](https://github.com/boostorg/wave/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/wave/actions?query=branch%3Amaster) | -Develop | [![AppVeyor](https://ci.appveyor.com/api/projects/status/3v74vuhk8dwt2wr9/branch/develop?svg=true)](https://ci.appveyor.com/project/jefftrull/wave/branch/develop) | [![GitHub Actions](https://github.com/boostorg/wave/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/wave/actions?query=branch%3Adevelop) | +Branch | GitHub Actions (gcc, clang, MSVC) | +---------|-----------------------------| +Master | [![GitHub Actions](https://github.com/boostorg/wave/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/wave/actions?query=branch%3Amaster) | +Develop | [![GitHub Actions](https://github.com/boostorg/wave/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/wave/actions?query=branch%3Adevelop) | The Wave C++ preprocessor library is a Standards conformant implementation of the mandated C99/C++ preprocessor functionality packed behind a simple to use interface, which integrates well with the well known idioms of the Standard Template Library (STL).