diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..b042e9fe --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,455 @@ +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2021-2024 Alexander Grund +# Copyright 2022 James E. King III +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) +--- +name: CI (Boost) + +on: + pull_request: + push: + branches: + - master + - develop + - bugfix/** + - feature/** + - fix/** + - pr/** + paths-ignore: + - LICENSE + - meta/** + - README.md + +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + +env: + GIT_FETCH_JOBS: 8 + NET_RETRY_COUNT: 5 + B2_CI_VERSION: 1 + B2_VARIANT: debug,release + B2_LINK: shared,static + LCOV_BRANCH_COVERAGE: 0 + CODECOV_NAME: Github Actions + +jobs: + posix: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + # Linux, gcc + - { compiler: gcc-10, cxxstd: '20', os: ubuntu-22.04 } + - { compiler: gcc-11, cxxstd: '20', os: ubuntu-22.04 } + - { compiler: gcc-12, cxxstd: '20', os: ubuntu-22.04 } + - { compiler: gcc-13, cxxstd: '17,20,2b', os: ubuntu-24.04 } + - { compiler: gcc-14, cxxstd: '17,20,2b', os: ubuntu-24.04 } + + - { name: GCC w/ sanitizers, sanitize: yes, + compiler: gcc-13, cxxstd: '20', os: ubuntu-24.04 } + - { name: Collect coverage, coverage: yes, + compiler: gcc-13, cxxstd: '2b', os: ubuntu-24.04, install: 'g++-13-multilib gcc-multilib', address-model: '32,64' } + + # Linux, clang + - { compiler: clang-12, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04' } + - { compiler: clang-13, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-14, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-15, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:22.04' } + - { compiler: clang-16, cxxstd: '17,20', os: ubuntu-24.04 } # removed 2b: error: no matching function for call to 'get' + - { compiler: clang-17, cxxstd: '17,20,23', os: ubuntu-latest, container: 'ubuntu:24.04' } + - { compiler: clang-18, cxxstd: '17,20,23,2c', os: ubuntu-24.04 } + + # libc++ + - { compiler: clang-12, cxxstd: '17', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } + - { name: Clang w/ sanitizers, sanitize: yes, + compiler: clang-12, cxxstd: '20', os: ubuntu-latest, container: 'ubuntu:20.04', stdlib: libc++ } + + # OSX, clang + - { name: MacOS w/ clang and sanitizers, + compiler: clang, cxxstd: '17,20,2b', os: macos-13, sanitize: yes } + - { compiler: clang, cxxstd: '17,20,2b', os: macos-14 } + - { compiler: clang, cxxstd: '17,20,2b', os: macos-15 } + + # Coverity Scan + # requires two github secrets in repo to activate; see ci/github/coverity.sh + # does not run on pull requests, only on pushes into develop and master + - { name: Coverity, coverity: yes, + compiler: clang-12, cxxstd: '20', os: ubuntu-22.04, ccache: no } + + # multiarch (bigendian testing) - does not support coverage yet + - { name: Big-endian, multiarch: yes, + compiler: clang, cxxstd: '17', os: ubuntu-22.04, ccache: no, distro: fedora, edition: 34, arch: s390x } + + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + container: + image: ${{matrix.container}} + volumes: + - /node20217:/node20217:rw,rshared + - ${{ startsWith(matrix.container, 'ubuntu:1') && '/node20217:/__e/node20:ro,rshared' || ' ' }} + env: {B2_USE_CCACHE: 1} + + steps: + - name: Setup environment + run: | + if [ -f "/etc/debian_version" ]; then + echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV + export DEBIAN_FRONTEND=noninteractive + fi + if [ -n "${{matrix.container}}" ] && [ -f "/etc/debian_version" ]; then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install sudo software-properties-common curl + # Need (newer) git, and the older Ubuntu container may require requesting the key manually using port 80 + curl -sSL --retry ${NET_RETRY_COUNT:-5} 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xE1DD270288B4E6030699E45FA1715D88E1DF1F24' | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/git-core_ubuntu_ppa.gpg + for i in {1..${NET_RETRY_COUNT:-3}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + osver=$(lsb_release -sr | cut -f1 -d.) + pkgs="g++ git xz-utils" + # Ubuntu 22+ has only Python 3 in the repos + if [ -n "$osver" ] && [ "$osver" -ge "20" ]; then + pkgs+=" python-is-python3 libpython3-dev" + else + pkgs+=" python libpython-dev" + fi + apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install $pkgs + fi + # For jobs not compatible with ccache, use "ccache: no" in the matrix + if [[ "${{ matrix.ccache }}" == "no" ]]; then + echo "B2_USE_CCACHE=0" >> $GITHUB_ENV + fi + if [[ "${{ matrix.sanitize }}" == "yes" ]]; then + echo "LSAN_OPTIONS=suppressions=${GITHUB_WORKSPACE}/test/suppressions.txt" >> $GITHUB_ENV + fi + git config --global pack.threads 0 + if [[ "${{matrix.container}}" == "ubuntu:1"* ]]; then + # Node 20 doesn't work with Ubuntu 16/18 glibc: https://github.com/actions/checkout/issues/1590 + curl -sL https://archives.boost.io/misc/node/node-v20.9.0-linux-x64-glibc-217.tar.xz | tar -xJ --strip-components 1 -C /node20217 + fi + + - uses: actions/checkout@v4 + with: + # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' + fetch-depth: ${{ matrix.coverage && '0' || '1' }} + + - name: Cache ccache + uses: actions/cache@v4 + if: env.B2_USE_CCACHE + with: + path: ~/.ccache + key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{github.sha}} + restore-keys: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- + + - name: Fetch Boost.CI + uses: actions/checkout@v4 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + + - name: Get CI scripts folder + run: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Install packages + if: startsWith(matrix.os, 'ubuntu') + run: | + SOURCE_KEYS=("${{join(matrix.source_keys, '" "')}}") + SOURCES=("${{join(matrix.sources, '" "')}}") + # Add this by default + SOURCE_KEYS+=('http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x1E9377A2BA9EF27F') + SOURCES+=(ppa:ubuntu-toolchain-r/test) + + ci/add-apt-keys.sh "${SOURCE_KEYS[@]}" + # Initial update before adding sources required to get e.g. keys + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + ci/add-apt-repositories.sh "${SOURCES[@]}" + + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + if [[ -z "${{matrix.install}}" ]]; then + compiler="${{matrix.compiler}}" + pkgs="${compiler/gcc-/g++-}" + [[ -z "${{matrix.gcc_toolchain}}" ]] || pkgs+=" g++-${{matrix.gcc_toolchain}}" + if [[ "${{matrix.stdlib}}" == "libc++" && $compiler == "clang-"* ]]; then + ver=${compiler#*-} + pkgs+=" libc++-${ver}-dev libc++abi-${ver}-dev" + fi + else + pkgs="${{matrix.install}}" + fi + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install $pkgs + + - name: Setup GCC Toolchain + if: matrix.gcc_toolchain + run: | + GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" + echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV + if ! command -v dpkg-architecture; then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT -y -q --no-install-suggests --no-install-recommends install dpkg-dev + fi + MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" + mkdir -p "$GCC_TOOLCHAIN_ROOT" + ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" + ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" + mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" + ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" + + - name: Setup multiarch + if: matrix.multiarch + run: ci/github/setup_bdde.sh + env: + BDDE_DISTRO: ${{matrix.distro}} + BDDE_EDITION: ${{matrix.edition}} + BDDE_ARCH: ${{matrix.arch}} + + - name: Setup Boost + run: source ci/github/install.sh + env: + B2_ADDRESS_MODEL: ${{matrix.address-model}} + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + # Optional. Variables set here (to non-empty) will override the top-level environment variables + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + # More entries can be added in the same way, see the B2_ARGS assignment in ci/enforce.sh for the possible keys. + # Set the (B2) target(s) to build, defaults to the test folder of the current library + # Can alternatively be done like this in the build step or in the build command of the build step, e.g. `run: B2_TARGETS=libs/$SELF/doc ci/build.sh` + # B2_TARGETS: libs/foo/test//bar + + - name: Setup coverage collection + if: matrix.coverage + run: ci/github/codecov.sh "setup" + + - name: Run tests + if: '!matrix.coverity' + run: ci/build.sh + + - name: Collect coverage + if: matrix.coverage + run: ci/codecov.sh "collect" + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v5 + with: + fail_ci_if_error: true + disable_search: true + files: coverage.info + name: ${{env.CODECOV_NAME}} (POSIX) + token: ${{secrets.CODECOV_TOKEN}} + verbose: true + + - name: Run coverity + if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') + run: ci/github/coverity.sh + env: + COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + + windows: + defaults: + run: + shell: cmd + strategy: + fail-fast: false + matrix: + include: + - { toolset: msvc-14.2, cxxstd: '17,20', addrmd: '32,64', os: windows-2019 } + - { toolset: msvc-14.3, cxxstd: '17,20,latest',addrmd: '32,64', os: windows-2022 } + - { name: Collect coverage, coverage: yes, + toolset: msvc-14.3, cxxstd: 'latest', addrmd: '64', os: windows-2022 } + - { toolset: clang-win, cxxstd: '17,latest', addrmd: '32,64', os: windows-2022 } + - { toolset: gcc, cxxstd: '17,2a', addrmd: '64', os: windows-2019 } + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 + + - name: Fetch Boost.CI + uses: actions/checkout@v4 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + - name: Get CI scripts folder + run: | + REM Copy ci folder if not testing Boost.CI + if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci + rmdir /s /q boost-ci-cloned + + - name: Setup Boost + run: ci\github\install.bat + + - name: Run tests + if: '!matrix.coverage' + run: ci\build.bat + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + + - name: Collect coverage + shell: powershell + if: matrix.coverage + run: ci\opencppcoverage.ps1 + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v5 + with: + disable_search: true + files: __out/cobertura.xml + name: ${{env.CODECOV_NAME}} (Windows) + token: ${{secrets.CODECOV_TOKEN}} + verbose: true + + MSYS2: + defaults: + run: + shell: msys2 {0} + strategy: + fail-fast: false + matrix: + include: + - { sys: MINGW32, compiler: gcc, cxxstd: '17,20' } + - { sys: MINGW64, compiler: gcc, cxxstd: '17,20' } + + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup MSYS2 environment + uses: msys2/setup-msys2@v2 + with: + msystem: ${{matrix.sys}} + update: true + install: git python + pacboy: gcc:p cmake:p ninja:p + + - name: Fetch Boost.CI + uses: actions/checkout@v4 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + - name: Get CI scripts folder + run: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Setup Boost + run: ci/github/install.sh + env: + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + B2_DEFINES: ${{matrix.defines}} + B2_VARIANT: ${{matrix.variant}} + B2_LINK: ${{matrix.link}} + + - name: Run tests + run: ci/build.sh + + # Run also the CMake tests to avoid having to setup another matrix for CMake on MSYS + - name: Run CMake tests + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G Ninja -DCMAKE_BUILD_TYPE=Debug -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config Debug -j$B2_JOBS + ctest --output-on-failure --build-config Debug + + CMake: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-latest, build_type: Debug, generator: 'Unix Makefiles' } + - { os: windows-2019, build_type: Debug, generator: 'Visual Studio 16 2019' } + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v4 + - name: Fetch Boost.CI + uses: actions/checkout@v4 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + + - name: Get CI scripts folder + run: | + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + - name: Setup Boost + run: source ci/github/install.sh + env: {B2_DONT_BOOTSTRAP: 1} + + - name: Run CMake tests + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_test__ && cd __build_cmake_test__ + cmake -G "${{matrix.generator}}" -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. + cmake --build . --target tests --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Run CMake subdir tests + run: | + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_subdir_test" + cd "$cmake_test_folder" + mkdir __build_cmake_subdir_test__ && cd __build_cmake_subdir_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=OFF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_CXX_STANDARD=17 .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} + + - name: Install Library + run: | + cd "$BOOST_ROOT" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_INSTALL_PREFIX=$HOME/local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. + cmake --build . --target install --config ${{matrix.build_type}} -j$B2_JOBS + - name: Run CMake install tests + run: | + cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder + [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_install_test" + cd "$cmake_test_folder" + mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_PREFIX_PATH=$HOME/local .. + cmake --build . --config ${{matrix.build_type}} -j$B2_JOBS + ctest --output-on-failure --build-config ${{matrix.build_type}} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 5c27f180..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,113 +0,0 @@ -# Copyright (c) 2018-2025 Jean-Louis Leroy -# 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) - -# CI is quite simple at the moment. It will be improved and made more -# comprehensive, probably similar to Boost.Unordered. - -name: CI - -env: - BUILD_TYPE: Debug Release - -permissions: - contents: 'read' - pages: 'write' - id-token: 'write' - -on: [push, pull_request, workflow_dispatch] - -jobs: - Ubuntu: - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - config: [Debug, Release] - compiler: [clang++, g++] - steps: - - uses: actions/checkout@v4 - - name: Install clang++ - run: | - wget https://apt.llvm.org/llvm.sh - chmod +x llvm.sh - sudo ./llvm.sh $1 - if: matrix.compiler == 'clang++' - - name: Install Boost - run: sudo apt-get install -y libboost-all-dev - - name: Configure - run: cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DCMAKE_CXX_COMPILER=${{ matrix.compiler }} -DBUILD_TESTING=1 -DBUILD_EXAMPLES=1 -Bbuild - - name: Build - run: cmake --build build - - name: Test - run: | - ctest --test-dir build --rerun-failed --output-on-failure - Windows: - runs-on: windows-latest - strategy: - fail-fast: false - matrix: - config: [Debug, Release] - steps: - - uses: actions/checkout@v3 - - uses: ilammy/msvc-dev-cmd@v1 - - name: Install boost - uses: MarkusJx/install-boost@v2 - id: install-boost - with: - boost_version: 1.87.0 - - name: Configure - run: | - cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DBUILD_TESTING=1 -DBUILD_EXAMPLES=1 -Bbuild -DBoost_DIR=${{ steps.install-boost.outputs.BOOST_ROOT }} -DBoost_INCLUDE_DIR=${{steps.install-boost.outputs.BOOST_ROOT}}\include -DBoost_LIBRARY_DIRS=${{steps.install-boost.outputs.BOOST_ROOT}}\lib - env: - BOOST_ROOT: ${{ steps.install-boost.outputs.BOOST_ROOT }} - - name: Build - run: cmake --build build --config ${{ matrix.config }} - - name: Test - run: | - ctest --test-dir build --rerun-failed --output-on-failure -C ${{ matrix.config }} - MacOS: - runs-on: macos-latest - strategy: - fail-fast: false - matrix: - config: [Debug, Release] - steps: - - uses: actions/checkout@v3 - - uses: ilammy/msvc-dev-cmd@v1 - - name: Install boost - run: brew install boost - - name: Configure - run: | - cmake -DCMAKE_BUILD_TYPE=${{ matrix.config }} -DBUILD_TESTING=1 -DBUILD_EXAMPLES=1 -Bbuild - - name: Build - run: | - cmake --build build - - name: Test - run: | - ctest --test-dir build --rerun-failed --output-on-failure - Artifacts: - if: github.ref_name == 'master' - runs-on: ubuntu-latest - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - steps: - - uses: actions/checkout@v4 - - name: Install asciidoctor - run: | - sudo apt-get install asciidoctor - asciidoctor doc/openmethod.adoc -o build_outputs_folder/index.html - - name: Generate documentation - run: | - sudo apt-get install asciidoctor - asciidoctor doc/openmethod.adoc -o build_outputs_folder/index.html - - name: Build flat headers - run: dev/flatten.sh - - name: Upload static files as artifact - uses: actions/upload-pages-artifact@v3 - with: - path: build_outputs_folder/ - - name: Deploy to GitHub Pages - uses: actions/deploy-pages@v4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cc13636..f6272eda 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,53 +1,68 @@ -# Copyright (c) 2018-2025 Jean-Louis Leroy +# Generated by `boostdep --cmake openmethod` +# 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) +# https://www.boost.org/LICENSE_1_0.txt -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.5...3.20) -if(POLICY CMP0167) - cmake_policy(SET CMP0074 NEW) +project(boost_openmethod VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) + +set(BOOST_OPENMETHOD_IS_ROOT OFF) +if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set(BOOST_OPENMETHOD_IS_ROOT ON) endif() -if(POLICY CMP0167) - cmake_policy(SET CMP0167 NEW) +if(BOOST_OPENMETHOD_IS_ROOT) + include(CTest) +endif() +if(NOT BOOST_SUPERPROJECT_VERSION) + option(BOOST_OPENMETHOD_INSTALL "Install boost::openmethod files" ON) + option(BOOST_OPENMETHOD_BUILD_TESTS "Build boost::openmethod tests" ${BUILD_TESTING}) + option(BOOST_OPENMETHOD_BUILD_EXAMPLES "Build boost::openmethod examples" ${BOOST_OPENMETHOD_IS_ROOT}) +else() + set(BOOST_OPENMETHOD_BUILD_TESTS ${BUILD_TESTING}) endif() -project(boost_openmethod VERSION 1.87.0 LANGUAGES CXX) +if(BOOST_OPENMETHOD_IS_ROOT) + # + # Building inside Boost tree, but as a separate project e.g. on Travis or + # other CI, or when producing Visual Studio Solution and Projects. -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) + set(BOOST_INCLUDE_LIBRARIES openmethod) + set(BOOST_EXCLUDE_LIBRARIES openmethod) + list(APPEND BOOST_INCLUDE_LIBRARIES test) + if(BOOST_OPENMETHOD_BUILD_EXAMPLES) + # list(APPEND BOOST_INCLUDE_LIBRARIES optional) + endif() + + set(CMAKE_FOLDER _deps) + add_subdirectory(../.. _deps/boost EXCLUDE_FROM_ALL) + unset(CMAKE_FOLDER) endif() -set(CMAKE_CXX_STANDARD_REQUIRED ON) add_library(boost_openmethod INTERFACE) add_library(Boost::openmethod ALIAS boost_openmethod) -target_include_directories(boost_openmethod INTERFACE include) - -find_package(Boost COMPONENTS) -target_link_libraries(boost_openmethod INTERFACE Boost::boost) +target_compile_features(boost_openmethod INTERFACE cxx_std_17) -if(MSVC) - add_compile_options(/EHsc /FAs /bigobj) -endif() +target_include_directories(boost_openmethod INTERFACE include) -if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - message(STATUS "Enabling sanitizers") - add_compile_options( - -fPIC -Wno-deprecated-declarations -Wall -Wextra -Werror - -fsanitize=undefined -fsanitize=address -fsanitize=leak) - add_link_options(-fsanitize=undefined -fsanitize=address -fsanitize=leak) -endif() +target_link_libraries( + boost_openmethod + INTERFACE + Boost::assert + Boost::config + Boost::core + Boost::dynamic_bitset + Boost::mp11 + Boost::preprocessor +) -if(BUILD_TESTING) - message(STATUS "Building tests") - include(CTest) +if(BOOST_OPENMETHOD_BUILD_TESTS) enable_testing() add_subdirectory(test) endif() -if(BUILD_EXAMPLES) - message(STATUS "Building examples") +if(BOOST_OPENMETHOD_BUILD_EXAMPLES) add_subdirectory(example) endif() diff --git a/README.md b/README.md index 744d8983..2c984914 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,6 @@ Branch | GH Actions | Azure Pipelines | Coverity Scan | codecov.io | De [`master`](https://github.com/jll63/openmethod/tree/master) | [![CI](https://github.com/jll63/openmethod/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/jll63/openmethod/actions/workflows/ci.yml) | [![Build Status](https://dev.azure.com/maintainer/template/_apis/build/status/pipeline?branchName=master)](https://dev.azure.com/maintainer/template/_build/latest?definitionId=6&branchName=master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/BADLE-NUMBER-LIKE-13982/badge.svg)](https://scan.coverity.com/projects/boostorg-template) | [![codecov](https://codecov.io/gh/jll63/openmethod/branch/master/graph/badge.svg)](https://codecov.io/gh/jll63/openmethod/branch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/template.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](https://www.boost.org/doc/libs/master/libs/template/doc/html/template.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/template.html) [`develop`](https://github.com/jll63/openmethod/tree/develop) | [![CI](https://github.com/jll63/openmethod/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/jll63/openmethod/actions/workflows/ci.yml) | [![Build Status](https://dev.azure.com/maintainer/template/_apis/build/status/pipeline?branchName=develop)](https://dev.azure.com/maintainer/template/_build/latest?definitionId=6&branchName=develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/BADGE-NUMBER-LIKE-13982/badge.svg)](https://scan.coverity.com/projects/boostorg-template) | [![codecov](https://codecov.io/gh/jll63/openmethod/branch/develop/graph/badge.svg)](https://codecov.io/gh/jll63/openmethod/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/template.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](https://www.boost.org/doc/libs/develop/libs/template/doc/html/template.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/template.html) - ### Directories | Name | Purpose | diff --git a/meta/libraries.json b/meta/libraries.json new file mode 100644 index 00000000..fd941d7c --- /dev/null +++ b/meta/libraries.json @@ -0,0 +1,15 @@ +{ + "key": "openmethod", + "name": "OpenMethod", + "authors": [ + "Jean-Louis Leroy" + ], + "maintainers": [ + "Jean-Louis Leroy" + ], + "description": "Open methods for C++17 and above.", + "category": [ + "Programming" + ], + "cxxstd": "17" +} diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index c454bcb8..aa45b915 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,11 +3,18 @@ # See accompanying file LICENSE_1_0.txt # or copy at http://www.boost.org/LICENSE_1_0.txt) +if(NOT TARGET tests) + add_custom_target(tests ${EXCLUDE_TESTS_FROM_ALL}) + set_property(TARGET tests PROPERTY FOLDER _deps) +endif() + file(GLOB test_cpp_files "test_*.cpp") + foreach(test_cpp ${test_cpp_files}) cmake_path(REMOVE_EXTENSION test_cpp LAST_ONLY OUTPUT_VARIABLE test) string(REGEX REPLACE ".*/" "" test ${test}) add_executable(${test} ${test_cpp}) - target_link_libraries(${test} Boost::openmethod) + target_link_libraries(${test} Boost::openmethod Boost::unit_test_framework) add_test(NAME ${test} COMMAND ${test}) + add_dependencies(tests ${test}) endforeach() diff --git a/test/Jamfile b/test/Jamfile index cda6c352..a8a1baf3 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -25,12 +25,21 @@ project # clang:on ; -# list +alias unit_test_framework + : # sources + /boost/test//boost_unit_test_framework + ; + for local src in [ glob test_*.cpp ] { - run $(src) ; + run $(src) unit_test_framework ; +} + +for local src in [ glob compile_fail_*.cpp ] +{ + compile-fail $(src) ; } # quick (for CI) -alias quick : test_blackbox ; +alias quick : test_dispatch ; explicit quick ; diff --git a/test/cmake_install_test/CMakeLists.txt b/test/cmake_install_test/CMakeLists.txt new file mode 100644 index 00000000..eb0df159 --- /dev/null +++ b/test/cmake_install_test/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright 2018, 2019, 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 + +cmake_minimum_required(VERSION 3.5...3.20) + +project(cmake_install_test LANGUAGES CXX) + +find_package(boost_openmethod REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main Boost::openmethod) + +enable_testing() +add_test(main main) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/cmake_install_test/main.cpp b/test/cmake_install_test/main.cpp new file mode 100644 index 00000000..cd540c4d --- /dev/null +++ b/test/cmake_install_test/main.cpp @@ -0,0 +1,126 @@ +// Copyright (c) 2018-2025 Jean-Louis Leroy +// 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 +#include +#include + +#include +#include + +using boost::openmethod::virtual_ptr; + +struct Character { + virtual ~Character() { + } +}; + +struct Warrior : Character {}; + +struct Device { + virtual ~Device() { + } +}; + +struct Hands : Device {}; +struct Axe : Device {}; +struct Banana : Device {}; + +struct Creature { + virtual ~Creature() { + } +}; + +struct Dragon : Creature {}; +struct Bear : Creature {}; + +BOOST_OPENMETHOD_CLASSES( + Character, Warrior, Device, Hands, Axe, Banana, Creature, Dragon, Bear); + +BOOST_OPENMETHOD( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string); + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "are you insane?"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "not agile enough to wield"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "and cuts it into pieces"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "and dies a honorable death"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "Congratulations! You have just vainquished a dragon with your bare " + "hands" + " (unbelievable, isn't it?)"; +} + +auto main() -> int { + boost::openmethod::initialize(); + + std::unique_ptr bob = std::make_unique(), + rambo = std::make_unique(); + + std::unique_ptr elliott = std::make_unique(), + paddington = std::make_unique(); + + std::unique_ptr hands = std::make_unique(), + axe = std::make_unique(), + chiquita = std::make_unique(); + + std::cout << "bob fights elliot with axe:\n" + << fight(*bob, *elliott, *axe) << "\n"; + // bob fights elliot with axe: + // not agile enough to wield + + std::cout << "rambo fights paddington with axe:\n" + << fight(*rambo, *paddington, *axe) << "\n"; + // rambo fights paddington with axe: + // and cuts it into pieces + + std::cout << "rambo fights paddington with banana:\n" + << fight(*rambo, *paddington, *chiquita) << "\n"; + // rambo fights paddington with banana: + // are you insane? + + std::cout << "rambo fights elliott with axe:\n" + << fight(*rambo, *elliott, *axe) << "\n"; + // rambo fights elliott with axe: + // and dies a honorable death + + std::cout << "bob fights elliot with hands:\n" + << fight(*bob, *elliott, *hands) << "\n"; + // bob fights elliot with hands: Congratulations! You have just vainquished + // a dragon with your bare hands (unbelievable, isn't it?) + + std::cout << "rambo fights elliot with hands:\n" + << fight(*rambo, *elliott, *hands) << "\n"; + // rambo fights elliot with hands: + // you just killed a dragon with your bare hands. Incredible isn't it? + + return 0; +} + +auto call_fight(Character& character, Creature& creature, Device& device) { + return fight(character, creature, device); +} diff --git a/test/cmake_subdir_test/CMakeLists.txt b/test/cmake_subdir_test/CMakeLists.txt new file mode 100644 index 00000000..9d15eb86 --- /dev/null +++ b/test/cmake_subdir_test/CMakeLists.txt @@ -0,0 +1,47 @@ +# Copyright 2018, 2019, 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 + +cmake_minimum_required(VERSION 3.5...3.20) + +project(cmake_subdir_test LANGUAGES CXX) + +add_subdirectory(../.. boostorg/openmethod) + +# boostdep --brief openmethod + +set(deps + +# Primary dependencies + +assert +config +core +dynamic_bitset +mp11 +preprocessor + +# Secondary dependencies + +static_assert +throw_exception +container_hash +integer +move +describe +type_traits +) + +foreach(dep IN LISTS deps) + + add_subdirectory(../../../${dep} boostorg/${dep}) + +endforeach() + +add_executable(main main.cpp) +target_link_libraries(main Boost::openmethod) + +enable_testing() +add_test(main main) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/cmake_subdir_test/main.cpp b/test/cmake_subdir_test/main.cpp new file mode 100644 index 00000000..cd540c4d --- /dev/null +++ b/test/cmake_subdir_test/main.cpp @@ -0,0 +1,126 @@ +// Copyright (c) 2018-2025 Jean-Louis Leroy +// 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 +#include +#include + +#include +#include + +using boost::openmethod::virtual_ptr; + +struct Character { + virtual ~Character() { + } +}; + +struct Warrior : Character {}; + +struct Device { + virtual ~Device() { + } +}; + +struct Hands : Device {}; +struct Axe : Device {}; +struct Banana : Device {}; + +struct Creature { + virtual ~Creature() { + } +}; + +struct Dragon : Creature {}; +struct Bear : Creature {}; + +BOOST_OPENMETHOD_CLASSES( + Character, Warrior, Device, Hands, Axe, Banana, Creature, Dragon, Bear); + +BOOST_OPENMETHOD( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string); + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "are you insane?"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "not agile enough to wield"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "and cuts it into pieces"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "and dies a honorable death"; +} + +BOOST_OPENMETHOD_OVERRIDE( + fight, (virtual_ptr, virtual_ptr, virtual_ptr), + std::string) { + return "Congratulations! You have just vainquished a dragon with your bare " + "hands" + " (unbelievable, isn't it?)"; +} + +auto main() -> int { + boost::openmethod::initialize(); + + std::unique_ptr bob = std::make_unique(), + rambo = std::make_unique(); + + std::unique_ptr elliott = std::make_unique(), + paddington = std::make_unique(); + + std::unique_ptr hands = std::make_unique(), + axe = std::make_unique(), + chiquita = std::make_unique(); + + std::cout << "bob fights elliot with axe:\n" + << fight(*bob, *elliott, *axe) << "\n"; + // bob fights elliot with axe: + // not agile enough to wield + + std::cout << "rambo fights paddington with axe:\n" + << fight(*rambo, *paddington, *axe) << "\n"; + // rambo fights paddington with axe: + // and cuts it into pieces + + std::cout << "rambo fights paddington with banana:\n" + << fight(*rambo, *paddington, *chiquita) << "\n"; + // rambo fights paddington with banana: + // are you insane? + + std::cout << "rambo fights elliott with axe:\n" + << fight(*rambo, *elliott, *axe) << "\n"; + // rambo fights elliott with axe: + // and dies a honorable death + + std::cout << "bob fights elliot with hands:\n" + << fight(*bob, *elliott, *hands) << "\n"; + // bob fights elliot with hands: Congratulations! You have just vainquished + // a dragon with your bare hands (unbelievable, isn't it?) + + std::cout << "rambo fights elliot with hands:\n" + << fight(*rambo, *elliott, *hands) << "\n"; + // rambo fights elliot with hands: + // you just killed a dragon with your bare hands. Incredible isn't it? + + return 0; +} + +auto call_fight(Character& character, Creature& creature, Device& device) { + return fight(character, creature, device); +} diff --git a/test/compile_fail_not_polymorphic_virtual_ptr.cpp b/test/compile_fail_not_polymorphic_virtual_ptr.cpp new file mode 100644 index 00000000..7e6d957a --- /dev/null +++ b/test/compile_fail_not_polymorphic_virtual_ptr.cpp @@ -0,0 +1,11 @@ +// Copyright (c) 2018-2025 Jean-Louis Leroy +// 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 + +struct Cat {}; + +Cat felix; +boost::openmethod::virtual_ptr p(felix); diff --git a/test/test_compiler.cpp b/test/test_compiler.cpp index c789932d..4cc53137 100644 --- a/test/test_compiler.cpp +++ b/test/test_compiler.cpp @@ -12,7 +12,7 @@ #include "test_util.hpp" #define BOOST_TEST_MODULE compiler -#include +#include using namespace boost::openmethod; diff --git a/test/test_core.cpp b/test/test_core.cpp index ce551696..16e86207 100644 --- a/test/test_core.cpp +++ b/test/test_core.cpp @@ -7,7 +7,7 @@ #include #define BOOST_TEST_MODULE core -#include +#include #include diff --git a/test/test_custom_rtti.cpp b/test/test_custom_rtti.cpp index 0b94af53..0257191d 100644 --- a/test/test_custom_rtti.cpp +++ b/test/test_custom_rtti.cpp @@ -4,7 +4,7 @@ // or copy at http://www.boost.org/LICENSE_1_0.txt) #define BOOST_TEST_MODULE openmethod -#include +#include #include #include @@ -448,7 +448,7 @@ struct custom_rtti : policies::deferred_static_rtti { if constexpr (is_polymorphic) { return type_id(T::static_type); } else { - return nullptr; + return type_id(0); } } @@ -457,14 +457,14 @@ struct custom_rtti : policies::deferred_static_rtti { if constexpr (is_polymorphic) { return type_id(obj.type); } else { - return nullptr; + return type_id(0); } } template static void type_name(type_id type, Stream& stream) { - static const char* name[] = {"Animal", "Dog", "Cat"}; - stream << (type == nullptr ? "?" : name[std::size_t(type)]); + static const char* name[] = {"?", "Animal", "Dog", "Cat"}; + stream << name[std::size_t(type)]; } static auto type_index(type_id type) { diff --git a/test/test_dispatch.cpp b/test/test_dispatch.cpp index 95d4ed92..77925a7f 100644 --- a/test/test_dispatch.cpp +++ b/test/test_dispatch.cpp @@ -19,7 +19,7 @@ #include "test_util.hpp" #define BOOST_TEST_MODULE openmethod -#include +#include using namespace boost::openmethod; diff --git a/test/test_intrusive.cpp b/test/test_intrusive.cpp index 34647d9d..ec94f9e2 100644 --- a/test/test_intrusive.cpp +++ b/test/test_intrusive.cpp @@ -19,8 +19,8 @@ struct test_registry #include #include -#define BOOST_TEST_MODULE instrusive -#include +#define BOOST_TEST_MODULE intrusive +#include #include #include "test_util.hpp" diff --git a/test/test_member_method.cpp b/test/test_member_method.cpp index c201de9b..44260ddc 100644 --- a/test/test_member_method.cpp +++ b/test/test_member_method.cpp @@ -52,7 +52,7 @@ struct Payroll { BOOST_OPENMETHOD_REGISTER(Payroll::pay_functions); #define BOOST_TEST_MODULE openmethod -#include +#include BOOST_AUTO_TEST_CASE(member_method) { initialize(); diff --git a/test/test_n2216.cpp b/test/test_n2216.cpp index 147c2c71..7269a18c 100644 --- a/test/test_n2216.cpp +++ b/test/test_n2216.cpp @@ -18,7 +18,7 @@ #include "test_util.hpp" #define BOOST_TEST_MODULE openmethod -#include +#include using namespace boost::openmethod; diff --git a/test/test_pointer_to_method.cpp b/test/test_pointer_to_method.cpp index 2506969a..04a46089 100644 --- a/test/test_pointer_to_method.cpp +++ b/test/test_pointer_to_method.cpp @@ -9,7 +9,7 @@ #include #define BOOST_TEST_MODULE openmethod -#include +#include using boost::openmethod::virtual_; diff --git a/test/test_policies.cpp b/test/test_policies.cpp index 41aa1714..3654bb4b 100644 --- a/test/test_policies.cpp +++ b/test/test_policies.cpp @@ -6,8 +6,8 @@ #include #include -#define BOOST_TEST_MODULE core -#include +#define BOOST_TEST_MODULE policies +#include #include diff --git a/test/test_runtime_errors.cpp b/test/test_runtime_errors.cpp index bdfcf218..451006a8 100644 --- a/test/test_runtime_errors.cpp +++ b/test/test_runtime_errors.cpp @@ -14,7 +14,7 @@ #include #define BOOST_TEST_MODULE openmethod -#include +#include using namespace boost::openmethod; using namespace test_matrices; @@ -168,8 +168,8 @@ BOOST_OPENMETHOD_OVERRIDE( BOOST_AUTO_TEST_CASE(call_error) { auto report = initialize().report; - BOOST_TEST(report.not_implemented == 1); - BOOST_TEST(report.ambiguous == 1); + BOOST_TEST(report.not_implemented == 1u); + BOOST_TEST(report.ambiguous == 1u); { registry::capture capture; diff --git a/test/test_shared_virtual_ptr_value_semantics.cpp b/test/test_shared_virtual_ptr_value_semantics.cpp index a1fa681e..3cfeda93 100644 --- a/test/test_shared_virtual_ptr_value_semantics.cpp +++ b/test/test_shared_virtual_ptr_value_semantics.cpp @@ -6,7 +6,7 @@ #include #define BOOST_TEST_MODULE openmethod -#include +#include #include "test_virtual_ptr_value_semantics.hpp" diff --git a/test/test_static_list.cpp b/test/test_static_list.cpp index e4a474b5..21d29b12 100644 --- a/test/test_static_list.cpp +++ b/test/test_static_list.cpp @@ -3,10 +3,11 @@ // See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) -#include "boost/openmethod/detail/static_list.hpp" -#define BOOST_TEST_MODULE openmethod -#include +#define BOOST_TEST_MODULE static_list +#include + +#include "boost/openmethod/detail/static_list.hpp" using boost::openmethod::detail::static_list; diff --git a/test/test_unique_virtual_ptr_value_semantics.cpp b/test/test_unique_virtual_ptr_value_semantics.cpp index 63a72839..c18c24a5 100644 --- a/test/test_unique_virtual_ptr_value_semantics.cpp +++ b/test/test_unique_virtual_ptr_value_semantics.cpp @@ -6,7 +6,7 @@ #include #define BOOST_TEST_MODULE openmethod -#include +#include #include "test_virtual_ptr_value_semantics.hpp" diff --git a/test/test_virtual_ptr_dispatch.cpp b/test/test_virtual_ptr_dispatch.cpp index 6a62783e..c6692a50 100644 --- a/test/test_virtual_ptr_dispatch.cpp +++ b/test/test_virtual_ptr_dispatch.cpp @@ -13,7 +13,7 @@ #include #define BOOST_TEST_MODULE openmethod -#include +#include #include #include "test_util.hpp" diff --git a/test/test_virtual_ptr_value_semantics.cpp b/test/test_virtual_ptr_value_semantics.cpp index 665bd428..9b3c5f73 100644 --- a/test/test_virtual_ptr_value_semantics.cpp +++ b/test/test_virtual_ptr_value_semantics.cpp @@ -4,7 +4,7 @@ // or q at http://www.boost.org/LICENSE_1_0.txt) #define BOOST_TEST_MODULE openmethod -#include +#include #include "test_virtual_ptr_value_semantics.hpp"