diff --git a/.appveyor.yml b/.appveyor.yml index be1bdda..7361f87 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -1,5 +1,6 @@ # Copyright 2016, 2017 Peter Dimov -# Copyright (C) 2017 - 2019 James E. King III +# Copyright 2017 - 2019 James E. King III +# Copyright 2019 - 2021 Alexander Grund # 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) @@ -21,7 +22,7 @@ version: 1.0.{build}-{branch} -shallow_clone: true +shallow_clone: false branches: only: @@ -33,115 +34,101 @@ branches: - /pr\/.*/ matrix: + fast_finish: false # Adding MAYFAIL to any matrix job allows it to fail but the build stays green: allow_failures: - MAYFAIL: true environment: global: + B2_CI_VERSION: 1 + GIT_FETCH_JOBS: 4 # see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties # to use the default for a given environment, comment it out; recommend you build debug and release however: # on Windows it is important to exercise all the possibilities, especially shared vs static, however most # libraries that care about this exercise it in their Jamfiles... - # B2_ADDRESS_MODEL: address-model=64,32 - # B2_LINK: link=shared,static + B2_ADDRESS_MODEL: 32,64 + B2_LINK: shared,static # B2_THREADING: threading=multi,single - B2_VARIANT: variant=release + B2_VARIANT: release matrix: + - FLAVOR: Visual Studio 2022 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022 + B2_CXXFLAGS: -permissive- + B2_CXXSTD: 14,17,20 + B2_TOOLSET: msvc-14.3 + - FLAVOR: Visual Studio 2019 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXFLAGS: cxxflags=-permissive- - B2_CXXSTD: 17 # 2a + B2_CXXFLAGS: -permissive- + B2_CXXSTD: 14,17,2a B2_TOOLSET: msvc-14.2 - FLAVOR: Visual Studio 2017 C++2a Strict APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXFLAGS: cxxflags=-permissive- - B2_CXXSTD: 17 # 2a - B2_TOOLSET: msvc-14.1 - - - FLAVOR: Visual Studio 2017 C++17 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXSTD: 17 + B2_CXXFLAGS: -permissive- + B2_CXXSTD: 2a B2_TOOLSET: msvc-14.1 - B2_VARIANT: variant=debug - - FLAVOR: Visual Studio 2017 C++14 (Default) + - FLAVOR: Visual Studio 2017 C++14/17 APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: address-model=64,32 + B2_CXXSTD: 14,17 B2_TOOLSET: msvc-14.1 - FLAVOR: clang-cl - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXSTD: 11 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 + ADDCOMMANDS: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"' + B2_ADDRESS_MODEL: 64 + B2_CXXSTD: 11,14,17 B2_TOOLSET: clang-win - - FLAVOR: Visual Studio 2015 C++14 (Default) - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - B2_ADDRESS_MODEL: address-model=64,32 - B2_TOOLSET: msvc-14.0 - B2_VARIANT: variant=debug + # not supported + # - FLAVOR: Visual Studio 2015, 2013 + # APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + # B2_TOOLSET: msvc-12.0,msvc-14.0 - - FLAVOR: Visual Studio 2010, 2012, 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - B2_TOOLSET: msvc-10.0,msvc-11.0,msvc-12.0 + # - FLAVOR: Visual Studio 2008, 2010, 2012 + # APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + # B2_TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0 + # B2_ADDRESS_MODEL: 32 # No 64bit support - FLAVOR: cygwin (32-bit) APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ADDPATH: C:\cygwin\bin; - B2_ADDRESS_MODEL: address-model=32 - B2_CXXSTD: 03,11 - # https://github.com/boostorg/test/issues/144 - B2_DEFINES: define=_POSIX_C_SOURCE=200112L - B2_THREADING: threadapi=pthread + B2_ADDRESS_MODEL: 32 + B2_CXXSTD: 11,14,1z B2_TOOLSET: gcc - B2_VARIANT: variant=debug - FLAVOR: cygwin (64-bit) APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 ADDPATH: C:\cygwin64\bin; - B2_ADDRESS_MODEL: address-model=64 - B2_CXXSTD: 11,17 - # https://github.com/boostorg/test/issues/144 - B2_DEFINES: define=_POSIX_C_SOURCE=200112L define=__USE_ISOC99 - B2_THREADING: threadapi=pthread + B2_ADDRESS_MODEL: 64 + B2_CXXSTD: 11,14,1z B2_TOOLSET: gcc - FLAVOR: mingw32 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARCH: i686 - B2_ADDRESS_MODEL: address-model=32 - B2_CXXSTD: 03,11 - SCRIPT: ci\appveyor\mingw.bat - B2_VARIANT: variant=debug + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 + B2_ADDRESS_MODEL: 32 + ADDPATH: C:\mingw\bin; + B2_CXXSTD: 11,14,17,2a + B2_TOOLSET: gcc - FLAVOR: mingw64 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - ARCH: x86_64 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXSTD: 11,17 - B2_DEFINES: define=__USE_ISOC99 - SCRIPT: ci\appveyor\mingw.bat + 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: 11,14,17,2a + B2_TOOLSET: gcc install: - - set SELF=%APPVEYOR_PROJECT_NAME:-=_% - - git clone https://github.com/boostorg/boost-ci.git C:\boost-ci - - xcopy /s /e /q /i C:\boost-ci\ci .\ci + - '%ADDCOMMANDS%' + - git clone --depth 1 https://github.com/boostorg/boost-ci.git C:\boost-ci-cloned + # Copy ci folder if not testing Boost.CI + - if NOT "%APPVEYOR_PROJECT_NAME%" == "boost-ci" xcopy /s /e /q /i /y C:\boost-ci-cloned\ci .\ci + - rmdir /s /q C:\boost-ci-cloned - ci\appveyor\install.bat build: off -test_script: - - set SELF=%APPVEYOR_PROJECT_NAME:-=_% - - PATH=%ADDPATH%%PATH% - # The definition of B2_TOOLCXX omits B2_CXXSTD= if it was not defined above - - IF NOT DEFINED B2_CXXSTD (SET B2_TOOLCXX=toolset=%B2_TOOLSET%) ELSE (SET B2_TOOLCXX=toolset=%B2_TOOLSET% cxxstd=%B2_CXXSTD%) - # Echo the complete build command to the build log - - IF NOT DEFINED SCRIPT (ECHO b2 libs/%SELF:\=/% %B2_TOOLCXX% %B2_CXXFLAGS% %B2_DEFINES% %B2_THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3) - # Now go build... - - IF DEFINED SCRIPT (call libs\%SELF%\%SCRIPT%) ELSE (b2 libs/%SELF:\=/% %B2_TOOLCXX% %B2_CXXFLAGS% %B2_DEFINES% %B2_THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3) +test_script: ci\build.bat diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml deleted file mode 100644 index f976de3..0000000 --- a/.azure-pipelines.yml +++ /dev/null @@ -1,276 +0,0 @@ -# Copyright 2015-2019 Rene Rivera. -# Copyright 2019 Mateusz Loskot -# 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) - -# -# Generic Azure Pipelines build script for boostorg repositories -# See: https://github.com/boostorg/boost-ci/ -# -# Instructions for customizing this script for your library: -# -# 1. Customize the compilers and language levels you want. -# 2. If you have more than include/, src/, test/, example/, examples/, -# benchmark/ or tools/ directories, set the environment variable DEPINST. -# For example if your build uses code in "bench/" and "fog/" directories: -# - DEPINST: --include bench --include fog -# 3. Enable pull request builds in your boostorg/ account. -# -# That's it - the script will do everything else for you. - -trigger: - branches: - include: - - develop - - master - - bugfix/* - - feature/* - - fix/* - - pr/* - -pr: - branches: - include: - - develop - -variables: - - name: B2_VARIANT - value: variant=release,debug - -stages: - -- stage: Test - jobs: - - - job: 'Linux' - pool: - vmImage: 'ubuntu-16.04' - strategy: - matrix: - GCC 8: - B2_TOOLSET: gcc - B2_CXXSTD: 14,17 - CXX: g++-8 - PACKAGES: g++-8 - GCC 7: - B2_TOOLSET: gcc - B2_CXXSTD: 11,14,17 - CXX: g++-7 - PACKAGES: g++-7 - GCC 6: - B2_TOOLSET: gcc - B2_CXXSTD: 11,14 - CXX: g++-6 - PACKAGES: g++-6 - GCC 5: - B2_TOOLSET: gcc - B2_CXXSTD: 11 - CXX: g++-5 - PACKAGES: g++-5 - GCC 4.9: - B2_TOOLSET: gcc - B2_CXXSTD: 11 - CXX: g++-4.9 - PACKAGES: g++-4.9 - GCC 4.8: - B2_TOOLSET: gcc - B2_CXXSTD: 11 - CXX: g++-4.8 - PACKAGES: g++-4.8 - Clang 8: - B2_TOOLSET: clang - B2_CXXSTD: 14,17 - CXX: clang++-8 - PACKAGES: clang-8 - LLVM_REPO: llvm-toolchain-xenial-8 - Clang 7: - B2_TOOLSET: clang - B2_CXXSTD: 14,17 - CXX: clang++-7 - PACKAGES: clang-7 - LLVM_REPO: llvm-toolchain-xenial-7 - Clang 6: - B2_TOOLSET: clang - B2_CXXSTD: 14,17 - CXX: clang++-6.0 - PACKAGES: clang-6.0 - LLVM_REPO: llvm-toolchain-xenial-6.0 - Clang 5: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17 - PACKAGES: clang-5.0 - CXX: clang++-5.0 - LLVM_REPO: llvm-toolchain-xenial-5.0 - Clang 4: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17 - CXX: clang++-4.0 - PACKAGES: clang-4.0 - LLVM_REPO: llvm-toolchain-xenial-4.0 - Clang 3.9: - B2_TOOLSET: clang - B2_CXXSTD: 11,14 - CXX: clang++-3.9 - PACKAGES: clang-3.9 - Clang 3.8: - B2_TOOLSET: clang - CXX: clang++-3.8 - B2_CXXSTD: 11,14 - PACKAGES: clang-3.8 - Clang 3.7: - B2_TOOLSET: clang - B2_CXXSTD: 11 - CXX: clang++-3.7 - PACKAGES: clang-3.7 - Clang 3.6: - B2_TOOLSET: clang - B2_CXXSTD: 11 - CXX: clang++-3.6 - PACKAGES: clang-3.6 - Clang 3.5: - B2_TOOLSET: clang - B2_CXXSTD: 11 - CXX: clang++-3.5 - PACKAGES: clang-3.5 - steps: - - bash: | - set -e - uname -a - sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" - if test -n "${LLVM_REPO}" ; then - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - sudo -E apt-add-repository "deb http://apt.llvm.org/xenial/ ${LLVM_REPO} main" - fi - sudo -E apt-get update - sudo -E apt-get -yq --no-install-suggests --no-install-recommends install ${PACKAGES} - - git clone --branch master https://github.com/boostorg/boost-ci.git boost-ci - cp -pr boost-ci/ci boost-ci/.codecov.yml . - rm -rf boost-ci - source ci/azure-pipelines/install.sh - - # AzP requires to run special task in order to export - # SELF and BOOST_ROOT as job-scoped variable from a script. - # NOTE: Disable set -x is necessary, see the troubleshooting guide - # on "Variables having ' (single quote) appended": - # https://docs.microsoft.com/en-us/azure/devops/pipelines/troubleshooting - set +x - echo "##vso[task.setvariable variable=SELF]"$SELF - echo "##vso[task.setvariable variable=BOOST_ROOT]"$BOOST_ROOT - set -x - displayName: 'Install' - - bash: | - set -e - echo "SELF=$SELF" - echo "BOOST_ROOT=$BOOST_ROOT" - - cd $BOOST_ROOT/libs/$SELF - ci/azure-pipelines/build.sh --debug-configuration - displayName: 'Build' - - - job: 'Windows' - strategy: - matrix: - VS 2019 C++17 Strict: - B2_TOOLSET: msvc-14.2 - B2_CXXSTD: 17 - B2_CXXFLAGS: cxxflags=-permissive- - B2_ADDRESS_MODEL: address-model=64 - VM_IMAGE: 'windows-2019' - VS 2017 C++17 Strict: - B2_TOOLSET: msvc-14.1 - B2_CXXSTD: 17 - B2_CXXFLAGS: cxxflags=-permissive- - B2_ADDRESS_MODEL: address-model=64 - VM_IMAGE: 'vs2017-win2016' - VS 2017 C++17: - B2_TOOLSET: msvc-14.1 - B2_CXXSTD: 17 - B2_ADDRESS_MODEL: address-model=64,32 - VM_IMAGE: 'vs2017-win2016' - VS 2017 C++14: - B2_TOOLSET: msvc-14.1 - #B2_CXXSTD: 14 # default - B2_ADDRESS_MODEL: address-model=64,32 - VM_IMAGE: 'vs2017-win2016' - - pool: - vmImage: $(VM_IMAGE) - steps: - - script: | - set SELF=%BUILD_REPOSITORY_NAME:-=_% - for /f "tokens=2 delims=/" %%a in ("%SELF%") do set SELF=%%a - set BOOST_ROOT=%BUILD_SOURCESDIRECTORY%\boost-root - - git clone --branch master https://github.com/boostorg/boost-ci.git boost-ci - xcopy /s /e /q /i boost-ci\ci .\ci - cmd /k ci\azure-pipelines\install.bat - - echo ##vso[task.setvariable variable=SELF]%SELF% - echo ##vso[task.setvariable variable=BOOST_ROOT]%BOOST_ROOT% - displayName: 'Install' - - script: | - PATH=%ADDPATH%%PATH% - REM The definition of B2_TOOLCXX omits B2_CXXSTD= if it was not defined above - IF NOT DEFINED B2_CXXSTD (SET B2_TOOLCXX=toolset=%B2_TOOLSET%) ELSE (SET B2_TOOLCXX=toolset=%B2_TOOLSET% cxxstd=%B2_CXXSTD%) - cd %BOOST_ROOT% - ECHO b2 libs/%SELF:\=/% %B2_TOOLCXX% %B2_CXXFLAGS% %B2_DEFINES% %B2_THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3 - b2 libs/%SELF:\=/% %B2_TOOLCXX% %B2_CXXFLAGS% %B2_DEFINES% %B2_THREADING% %B2_ADDRESS_MODEL% %B2_LINK% %B2_THREADING% %B2_VARIANT% -j3 - displayName: 'Build' - - - job: 'macOS' - pool: - vmImage: 'macOS-10.14' - strategy: - matrix: - Xcode_11_3_1: - B2_TOOLSET: clang - B2_CXXSTD: 14,17,2a - XCODE_APP: /Applications/Xcode_11.3.1.app - Xcode_11_2_1: - B2_TOOLSET: clang - B2_CXXSTD: 14,17,2a - XCODE_APP: /Applications/Xcode_11.2.1.app - Xcode_11_2: - B2_TOOLSET: clang - B2_CXXSTD: 14,17,2a - XCODE_APP: /Applications/Xcode_11.2.app - Xcode_11_1: - B2_TOOLSET: clang - B2_CXXSTD: 14,17,2a - XCODE_APP: /Applications/Xcode_11.1.app - Xcode_10_3: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17,2a - XCODE_APP: /Applications/Xcode_10.3.app - Xcode_10_2_1: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17,2a - XCODE_APP: /Applications/Xcode_10.2.1.app - Xcode_10_2: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17,2a - XCODE_APP: /Applications/Xcode_10.2.app - Xcode_10_1: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17,2a - XCODE_APP: /Applications/Xcode_10.1.app - Xcode_10_0: - B2_TOOLSET: clang - B2_CXXSTD: 11,14,17,2a - XCODE_APP: /Applications/Xcode_10.app - steps: - - bash: | - set -e - git clone --branch master https://github.com/boostorg/boost-ci.git boost-ci-cloned - cp -prf boost-ci-cloned/ci . - rm -rf boost-ci-cloned - source ci/azure-pipelines/install.sh - displayName: Install - - bash: | - set -e - echo "SELF=$SELF" - echo "BOOST_ROOT=$BOOST_ROOT" - cd $BOOST_ROOT/libs/$SELF - ci/azure-pipelines/build.sh - displayName: 'Build' \ No newline at end of file diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 0000000..4e80d1c --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,25 @@ +# Copyright 2019 - 2021 Alexander Grund +# 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) +# +# Sample codecov configuration file. Edit as required + +codecov: + max_report_age: off + require_ci_to_pass: yes + notify: + # Increase this if you have multiple coverage collection jobs + after_n_builds: 1 + wait_for_ci: yes + +# Change how pull request comments look +comment: + layout: "reach,diff,flags,files,footer" + +# Ignore specific files or folders. Glob patterns are supported. +# See https://docs.codecov.com/docs/ignoring-paths +ignore: + - extra/* + - extra/**/* + - test/* + - test/**/* diff --git a/.drone.star b/.drone.star new file mode 100644 index 0000000..7cedae0 --- /dev/null +++ b/.drone.star @@ -0,0 +1,117 @@ +# Use, modification, and distribution are +# subject to the Boost Software License, Version 1.0. (See accompanying +# file LICENSE.txt) +# +# Copyright Rene Rivera 2020. +# Copyright Alan de Freitas 2022. + + +# For Drone CI we use the Starlark scripting language to reduce duplication. +# As the yaml syntax for Drone CI is rather limited. +# +# +globalenv={'B2_CI_VERSION': '1', 'B2_VARIANT': 'release'} +linuxglobalimage="cppalliance/droneubuntu1804:1" +windowsglobalimage="cppalliance/dronevs2019" + +def main(ctx): + return [ + # Priorities: (no 2a, no betas) + # + # coverage + # latest gcc: 17,20 + # latest clang: 17,20 + # oldest gcc: 11 + # oldest clang: 11 + # asan + # tsan + # ubsan + # valgrind + # arm64 + # s390x + # docs + # cmake superproject + # cmake install + # (...the rest) + + # Coverage + linux_cxx("Coverage", "g++-8", packages="g++-8", buildscript="drone", buildtype="codecov", image=linuxglobalimage, environment={'COMMENT': 'codecov.io', 'LCOV_BRANCH_COVERAGE': '0', 'B2_CXXSTD': '11', 'B2_TOOLSET': 'gcc-8', 'B2_DEFINES': 'BOOST_NO_STRESS_TEST=1', "CODECOV_TOKEN": {"from_secret": "codecov_token"}, "COVERALLS_REPO_TOKEN": {"from_secret": "coveralls_repo_token"}}, globalenv=globalenv), + + # Latest gcc + linux_cxx("GCC 12: C++17,20", "g++-12", packages="g++-12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'B2_TOOLSET': 'gcc-12', 'B2_CXXFLAGS': '-Werror -Wno-error=restrict', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + linux_cxx("GCC 12: C++17,20 Standalone", "g++-12", packages="g++-12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'B2_TOOLSET': 'gcc-12', 'B2_CXXFLAGS': '-Werror -Wno-error=restrict', 'B2_DEFINES': 'define=BOOST_STATIC_STRING_STANDALONE', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + + # Latest clang + linux_cxx("Clang 15: C++17,20", "clang++-15", packages="clang-15 libstdc++-10-dev", llvm_os="jammy", llvm_ver="15", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'B2_TOOLSET': 'clang-15', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + linux_cxx("Clang 15: C++17,20 Standalone", "clang++-15", packages="clang-15 libstdc++-10-dev", llvm_os="jammy", llvm_ver="15", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'B2_TOOLSET': 'clang-15', 'B2_CXXFLAGS': '-Werror', 'B2_DEFINES': 'define=BOOST_STATIC_STRING_STANDALONE', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + + # Oldest compilers + linux_cxx("GCC 4.8: C++11", "g++-4.8", packages="g++-4.8", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu1604:1", environment={'B2_TOOLSET': 'gcc-4.8', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '11'}, globalenv=globalenv), + linux_cxx("GCC 4.8: C++11 Standalone", "g++-4.8", packages="g++-4.8", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu1604:1", environment={'B2_TOOLSET': 'gcc-4.8', 'B2_CXXFLAGS': '-Werror', 'B2_DEFINES': 'define=BOOST_STATIC_STRING_STANDALONE', 'B2_CXXSTD': '11'}, globalenv=globalenv), + linux_cxx("Clang 3.8: C++11", "clang++-3.8", packages="clang-3.8", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu1604:1", environment={'B2_VARIANT': 'debug', 'B2_CXXFLAGS': '-Werror', 'B2_TOOLSET': 'clang-3.8', 'B2_CXXSTD': '11'}, globalenv=globalenv), + linux_cxx("Clang 3.8: C++11 Standalone", "clang++-3.8", packages="clang-3.8", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu1604:1", environment={'B2_VARIANT': 'debug', 'B2_CXXFLAGS': '-Werror', 'B2_TOOLSET': 'clang-3.8', 'B2_DEFINES': 'define=BOOST_STATIC_STRING_STANDALONE', 'B2_CXXSTD': '11'}, globalenv=globalenv), + + # Sanitizers + Valgrind + linux_cxx("ASan", "g++-12", packages="g++-12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'COMMENT': 'asan', 'B2_VARIANT': 'debug', 'B2_TOOLSET': 'gcc-12', 'B2_CXXSTD': '11,14,17', 'B2_ASAN': '1', 'B2_DEFINES': 'BOOST_NO_STRESS_TEST=1', 'DRONE_EXTRA_PRIVILEGED': 'True'}, globalenv=globalenv, privileged=True), + linux_cxx("TSan", "g++-12", packages="g++-12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'COMMENT': 'tsan', 'B2_VARIANT': 'debug', 'B2_TOOLSET': 'gcc-12', 'B2_CXXSTD': '11,14,17', 'B2_TSAN': '1', 'B2_DEFINES': 'BOOST_NO_STRESS_TEST=1'}, globalenv=globalenv), + linux_cxx("UBSan", "g++-12", packages="g++-12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'COMMENT': 'ubsan', 'B2_VARIANT': 'debug', 'B2_TOOLSET': 'gcc-12', 'B2_CXXSTD': '11,14,17', 'B2_UBSAN': '1', 'B2_DEFINES': 'define=BOOST_NO_STRESS_TEST=1', 'B2_LINKFLAGS': '-fuse-ld=gold'}, globalenv=globalenv), + linux_cxx("Valgrind", "clang++-14", packages="clang-14 libc6-dbg libc++-dev libstdc++-9-dev", llvm_os="jammy", llvm_ver="14", buildscript="drone", buildtype="valgrind", image="cppalliance/droneubuntu2204:1", environment={'COMMENT': 'valgrind', 'B2_TOOLSET': 'clang-14', 'B2_CXXSTD': '11,14,17', 'B2_DEFINES': 'BOOST_NO_STRESS_TEST=1', 'B2_VARIANT': 'debug', 'B2_TESTFLAGS': 'testing.launcher=valgrind', 'VALGRIND_OPTS': '--error-exitcode=1'}, globalenv=globalenv), + + # arm64 (unsigned char) + linux_cxx("ARM64: GCC 11", "g++-11", packages="g++-11", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2004:multiarch", environment={'B2_TOOLSET': 'gcc-11', 'B2_CXXFLAGS': '-Werror -Wno-error=array-bounds -Wno-error=restrict -Wno-error=stringop-overflow', 'B2_CXXSTD': '17,20'}, arch="arm64", globalenv=globalenv), + + # s390x + linux_cxx("S390x: Clang 12", "clang++-12", packages="clang-12 libstdc++-9-dev", llvm_os="focal", llvm_ver="12", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu2004:multiarch", environment={'B2_TOOLSET': 'clang-12', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17,20'}, arch="s390x", globalenv=globalenv), + + # Documentation + # linux_cxx("Docs", "g++", packages="docbook docbook-xml docbook-xsl xsltproc libsaxonhe-java default-jre-headless flex libfl-dev bison unzip rsync", buildtype="docs", buildscript="drone", image="cppalliance/droneubuntu1804:1", environment={'COMMENT': 'docs'}, globalenv=globalenv), + + # CMake tests (https://github.com/boostorg/boost-ci) + ## Compiling as part of the boost superproject + linux_cxx("CMake Superproject", "g++", packages="", buildscript="drone", buildtype="cmake-superproject", image="cppalliance/droneubuntu1804:1", globalenv=globalenv), + ## Installing + # linux_cxx("CMake Install", "g++", packages="", buildscript="drone", buildtype="cmake1", image="cppalliance/droneubuntu1804:1", environment={'CMAKE_INSTALL_TEST': '1'}, globalenv=globalenv), + + # ------------------------------------------------------------------ + + # OSX + osx_cxx("OSX: Clang", "g++", packages="", buildscript="drone", buildtype="boost", xcode_version="13.4.1", environment={'B2_TOOLSET': 'clang', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '11,17'}, globalenv=globalenv), + + # GCC (All other versions) + linux_cxx("GCC 4.9: C++11", "g++-4.9", packages="g++-4.9", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu1604:1", environment={'B2_TOOLSET': 'gcc-4.9', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '11'}, globalenv=globalenv), + linux_cxx("GCC 5: C++11", "g++-5", packages="g++-5", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-5', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '11'}, globalenv=globalenv), + linux_cxx("GCC 6: C++11,14", "g++-6", packages="g++-6", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-6', 'B2_CXXFLAGS': '-Werror -Wno-error=unused-function', 'B2_CXXSTD': '11,14'}, globalenv=globalenv), + linux_cxx("GCC 7: C++14,17", "g++-7", packages="g++-7", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-7', 'B2_CXXFLAGS': '-Werror -Wno-error=unused-function -Wno-error=noexcept-type', 'B2_CXXSTD': '14,17'}, globalenv=globalenv), + linux_cxx("GCC 8: C++17", "g++-8", packages="g++-8", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-8', 'B2_CXXFLAGS': '-Werror -Wno-error=unused-function -Wno-error=array-bounds', 'B2_CXXSTD': '17'}, globalenv=globalenv), + linux_cxx("GCC 9: C++17", "g++-9", packages="g++-9", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-9', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17'}, globalenv=globalenv), + linux_cxx("GCC 10: C++17", "g++-10", packages="g++-10", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-10', 'B2_CXXFLAGS': '-Werror -funsigned-char -Wno-error=array-bounds', 'B2_CXXSTD': '17'}, globalenv=globalenv), + linux_cxx("GCC 11: C++17,20", "g++-11", packages="g++-11", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-11', 'B2_CXXFLAGS': '-Werror -Wno-error=array-bounds -Wno-error=stringop-overflow', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + + # Clang (All other versions) + linux_cxx("Clang 4.0: C++11,14", "clang++-4.0", packages="clang-4.0 libstdc++-6-dev", llvm_os="xenial", llvm_ver="4.0", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu1804:1", environment={'B2_TOOLSET': 'clang-4.0', 'B2_CXXFLAGS': '', 'B2_CXXSTD': '11,14'}, globalenv=globalenv), + linux_cxx("Clang 5.0: C++11,14", "clang++-5.0", packages="clang-5.0 libstdc++-7-dev", llvm_os="bionic", llvm_ver="5.0", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-5.0', 'B2_CXXFLAGS': '', 'B2_CXXSTD': '11,14'}, globalenv=globalenv), + linux_cxx("Clang 6.0: C++11,14", "clang++-6.0", packages="clang-6.0 libc6-dbg libc++-dev libc++abi-dev libstdc++-8-dev", llvm_os="bionic", llvm_ver="6.0", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-6.0', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '11,14', 'B2_STDLIB': 'libc++'}, globalenv=globalenv), + linux_cxx("Clang 6.0: C++14,17", "clang++-6.0", packages="clang-6.0 libc6-dbg libc++-dev libc++abi-dev libstdc++-8-dev", llvm_os="bionic", llvm_ver="6.0", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-6.0', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '14,17'}, globalenv=globalenv), + linux_cxx("Clang 7: C++17", "clang++-7", packages="clang-7 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="bionic", llvm_ver="7", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-7', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17'}, globalenv=globalenv), + linux_cxx("Clang 8: C++17", "clang++-8", packages="clang-8 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="bionic", llvm_ver="8", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-8', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17'}, globalenv=globalenv), + linux_cxx("Clang 9: C++14,17", "clang++-9", packages="clang-9 libstdc++-9-dev", llvm_os="bionic", llvm_ver="9", buildscript="drone", buildtype="boost", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-9', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '14,17'}, globalenv=globalenv), + linux_cxx("Clang 10: C++14,17", "clang++-10", packages="clang-10 libstdc++-9-dev", llvm_os="focal", llvm_ver="10", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2004:1", environment={'B2_TOOLSET': 'clang-10', 'B2_CXXFLAGS': '-Werror -funsigned-char', 'B2_CXXSTD': '14,17'}, globalenv=globalenv), + linux_cxx("Clang 11: C++14,17", "clang++-11", packages="clang-11 libstdc++-9-dev", llvm_os="focal", llvm_ver="11", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2004:1", environment={'B2_TOOLSET': 'clang-11', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '14,17'}, globalenv=globalenv), + linux_cxx("Clang 12: C++17,20", "clang++-12", packages="clang-12 libstdc++-9-dev", llvm_os="focal", llvm_ver="12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2004:1", environment={'B2_TOOLSET': 'clang-12', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + linux_cxx("Clang 13: C++17,20", "clang++-13", packages="clang-13 libstdc++-10-dev", llvm_os="jammy", llvm_ver="13", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'B2_TOOLSET': 'clang-13', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + linux_cxx("Clang 14: C++17,20", "clang++-14", packages="clang-14 libstdc++-10-dev", llvm_os="jammy", llvm_ver="14", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2204:1", environment={'B2_TOOLSET': 'clang-14', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '17,20'}, globalenv=globalenv), + + # arm64 (unsigned char) + linux_cxx("ARM64: Clang 12", "clang++-12", packages="clang-12 libstdc++-9-dev", llvm_os="focal", llvm_ver="12", buildscript="drone", buildtype="boost", image="cppalliance/droneubuntu2004:multiarch", environment={'B2_TOOLSET': 'clang-12', 'B2_CXXFLAGS': '-Werror', 'B2_CXXSTD': '11,14,17,20'}, arch="arm64", globalenv=globalenv), + + # s390x + linux_cxx("S390x: GCC 11", "g++-11", packages="g++-11", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu2004:multiarch", environment={'B2_TOOLSET': 'gcc-11', 'B2_CXXFLAGS': '-Werror -Wno-error=array-bounds', 'B2_CXXSTD': '17'}, arch="s390x", globalenv=globalenv), + + # MSVC + windows_cxx("MSVC 14.1", "", image="cppalliance/dronevs2017", buildtype="boost", buildscript="drone", environment={"B2_TOOLSET": "msvc-14.1", 'B2_CXXFLAGS': '/WX', "B2_CXXSTD": "11,14,17"},globalenv=globalenv), + windows_cxx("MSVC 14.2: C++14,17,latest", "", image="cppalliance/dronevs2019", buildtype="boost", buildscript="drone", environment={"B2_TOOLSET": "msvc-14.2", 'B2_CXXFLAGS': '/WX', "B2_CXXSTD": "14,17,latest"},globalenv=globalenv), + windows_cxx("MSVC 14.3: C++17,20", "", image="cppalliance/dronevs2022", buildtype="boost", buildscript="drone", environment={"B2_TOOLSET": "msvc-14.3", 'B2_CXXFLAGS': '/WX', "B2_CXXSTD": "17,20"},globalenv=globalenv), +] + +# from https://github.com/boostorg/boost-ci +load("@boost_ci//ci/drone/:functions.star", "linux_cxx","windows_cxx","osx_cxx","freebsd_cxx") diff --git a/.drone/drone.bat b/.drone/drone.bat new file mode 100644 index 0000000..0dc0d6c --- /dev/null +++ b/.drone/drone.bat @@ -0,0 +1,31 @@ + +@ECHO ON +setlocal enabledelayedexpansion + +if "%DRONE_JOB_BUILDTYPE%" == "boost" ( + +echo '==================================> INSTALL' + +git clone https://github.com/boostorg/boost-ci.git boost-ci-cloned --depth 1 +cp -prf boost-ci-cloned/ci . +rm -rf boost-ci-cloned +REM source ci/travis/install.sh +REM The contents of install.sh below: + +for /F %%i in ("%DRONE_REPO%") do @set SELF=%%~nxi +SET BOOST_CI_TARGET_BRANCH=%DRONE_COMMIT_BRANCH% +SET BOOST_CI_SRC_FOLDER=%cd% + +call ci\common_install.bat + +echo '==================================> COMPILE' + +REM set B2_TARGETS=libs/!SELF!/test libs/!SELF!/example +set B2_TARGETS=libs/!SELF!/test +call !BOOST_ROOT!\libs\!SELF!\ci\build.bat + +) else if "%DRONE_JOB_BUILDTYPE%" == "standalone-windows" ( + +REM not used + +) \ No newline at end of file diff --git a/.drone/drone.sh b/.drone/drone.sh new file mode 100755 index 0000000..05d7ecd --- /dev/null +++ b/.drone/drone.sh @@ -0,0 +1,236 @@ +#!/bin/bash + +# Copyright 2020 Rene Rivera, Sam Darwin +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE.txt or copy at http://boost.org/LICENSE_1_0.txt) + +set -xe + +export TRAVIS_BUILD_DIR=$(pwd) +export DRONE_BUILD_DIR=$(pwd) +export TRAVIS_BRANCH=$DRONE_BRANCH +export TRAVIS_EVENT_TYPE=$DRONE_BUILD_EVENT +export VCS_COMMIT_ID=$DRONE_COMMIT +export GIT_COMMIT=$DRONE_COMMIT +export REPO_NAME=$DRONE_REPO +export USER=$(whoami) +export CC=${CC:-gcc} +export PATH=~/.local/bin:/usr/local/bin:$PATH + +common_install() { + git clone https://github.com/boostorg/boost-ci.git boost-ci-cloned --depth 1 + cp -prf boost-ci-cloned/ci . + rm -rf boost-ci-cloned + + if [ "$TRAVIS_OS_NAME" == "osx" ]; then + unset -f cd + fi + + export SELF=$(basename $REPO_NAME) + export BOOST_CI_TARGET_BRANCH="$TRAVIS_BRANCH" + export BOOST_CI_SRC_FOLDER=$(pwd) + + . ./ci/common_install.sh +} + +if [ "$DRONE_JOB_BUILDTYPE" == "boost" ]; then + + echo '==================================> INSTALL' + + common_install + + echo '==================================> SCRIPT' + + export B2_TARGETS=${B2_TARGETS:-"libs/$SELF/test"} + $BOOST_ROOT/libs/$SELF/ci/travis/build.sh + +elif [ "$DRONE_JOB_BUILDTYPE" == "docs" ]; then + + echo '==================================> INSTALL' + + export SELF=$(basename $REPO_NAME) + + pwd + cd .. + mkdir -p $HOME/cache && cd $HOME/cache + if [ ! -d doxygen ]; then git clone -b 'Release_1_8_15' --depth 1 https://github.com/doxygen/doxygen.git && echo "not-cached"; else echo "cached"; fi + cd doxygen + cmake -H. -Bbuild -DCMAKE_BUILD_TYPE=Release + cd build + sudo make install + cd ../.. + if [ ! -f saxonhe.zip ]; then wget -O saxonhe.zip https://sourceforge.net/projects/saxon/files/Saxon-HE/9.9/SaxonHE9-9-1-4J.zip/download && echo "not-cached"; else echo "cached"; fi + unzip -o saxonhe.zip + sudo rm /usr/share/java/Saxon-HE.jar + sudo cp saxon9he.jar /usr/share/java/Saxon-HE.jar + cd .. + BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true + git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root --depth 1 + cd boost-root + export BOOST_ROOT=$(pwd) + git submodule update --init libs/context + git submodule update --init tools/boostbook + git submodule update --init tools/boostdep + git submodule update --init tools/docca + git submodule update --init tools/quickbook + rsync -av $TRAVIS_BUILD_DIR/ libs/$SELF + python tools/boostdep/depinst/depinst.py ../tools/quickbook + ./bootstrap.sh + ./b2 headers + + echo '==================================> SCRIPT' + + echo "using doxygen ; using boostbook ; using saxonhe ;" >tools/build/src/user-config.jam + ./b2 -j3 libs/$SELF/doc//boostrelease + +elif [ "$DRONE_JOB_BUILDTYPE" == "codecov" ]; then + + echo '==================================> INSTALL' + + common_install + + echo '==================================> SCRIPT' + + set +e + + cd $BOOST_ROOT/libs/$SELF + ci/travis/codecov.sh + + # coveralls + # uses multiple lcov steps from boost-ci codecov.sh script + if [ -n "${COVERALLS_REPO_TOKEN}" ]; then + echo "processing coveralls" + pip3 install --user cpp-coveralls + cd $BOOST_CI_SRC_FOLDER + + export PATH=/tmp/lcov/bin:$PATH + command -v lcov + lcov --version + + lcov --remove coverage.info -o coverage_filtered.info '*/test/*' '*/extra/*' + cpp-coveralls --verbose -l coverage_filtered.info + fi + +elif [ "$DRONE_JOB_BUILDTYPE" == "valgrind" ]; then + + echo '==================================> INSTALL' + + common_install + + echo '==================================> SCRIPT' + + cd $BOOST_ROOT/libs/$SELF + ci/travis/valgrind.sh + +elif [ "$DRONE_JOB_BUILDTYPE" == "standalone" ]; then + + echo '==================================> INSTALL' + + # Installing cmake with apt-get, so not required here: + # pip install --user cmake + + echo '==================================> SCRIPT' + + export CXXFLAGS="-Wall -Wextra -Werror -std=c++17" + mkdir __build_17 + cd __build_17 + cmake -DBOOST_JSON_STANDALONE=1 .. + cmake --build . + ctest -V . + export CXXFLAGS="-Wall -Wextra -Werror -std=c++2a" + mkdir ../__build_2a + cd ../__build_2a + cmake -DBOOST_JSON_STANDALONE=1 .. + cmake --build . + ctest -V . + +elif [ "$DRONE_JOB_BUILDTYPE" == "coverity" ]; then + + echo '==================================> INSTALL' + + common_install + + echo '==================================> SCRIPT' + + if [ -n "${COVERITY_SCAN_NOTIFICATION_EMAIL}" -a \( "$TRAVIS_BRANCH" = "develop" -o "$TRAVIS_BRANCH" = "master" \) -a \( "$DRONE_BUILD_EVENT" = "push" -o "$DRONE_BUILD_EVENT" = "cron" \) ]; then + cd $BOOST_ROOT/libs/$SELF + ci/travis/coverity.sh + fi + +elif [ "$DRONE_JOB_BUILDTYPE" == "cmake-superproject" ]; then + + echo '==================================> INSTALL' + + common_install + + echo '==================================> COMPILE' + + # May want to re-enable -Werror + # export CXXFLAGS="-Wall -Wextra -Werror" + export CXXFLAGS="-Wall -Wextra" + + mkdir __build_static + cd __build_static + cmake -DBOOST_ENABLE_CMAKE=1 -DBUILD_TESTING=ON -DBoost_VERBOSE=1 \ + -DBOOST_INCLUDE_LIBRARIES=$SELF .. + cmake --build . + ctest --output-on-failure -R boost_$SELF + + cd .. + + mkdir __build_shared + cd __build_shared + cmake -DBOOST_ENABLE_CMAKE=1 -DBUILD_TESTING=ON -DBoost_VERBOSE=1 \ + -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=ON .. + cmake --build . + ctest --output-on-failure -R boost_$SELF + +elif [ "$DRONE_JOB_BUILDTYPE" == "cmake1" ]; then + + echo '==================================> INSTALL' + + # https://github.com/opencv/opencv-python#frequently-asked-questions + pip install --upgrade pip + pip install --user cmake + + echo '==================================> SCRIPT' + + export SELF=$(basename $REPO_NAME) + BOOST_BRANCH=develop && [ "$DRONE_BRANCH" == "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 + # mkdir -p libs/$SELF + # cp -r $DRONE_BUILD_DIR/* libs/$SELF + # git submodule update --init tools/boostdep + git submodule update --init --recursive + mkdir -p libs/$SELF + cp -r $DRONE_BUILD_DIR/* libs/$SELF + + # CMake tests + cd libs/$SELF + mkdir __build__ && cd __build__ + cmake -DCMAKE_INSTALL_PREFIX=~/.local .. + cmake --build . --target install + ctest --output-on-failure + + # CMake subdir tests + cd ../test/cmake_test && mkdir __build__ && cd __build__ + cmake -DCMAKE_INSTALL_PREFIX=~/.local .. + cmake --build . + cmake --build . --target check + ctest --output-on-failure + + # Install Library + cd ../../../../.. && mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -DBOOST_INCLUDE_LIBRARIES=$SELF -DCMAKE_INSTALL_PREFIX=~/.local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. + cmake --build . --target install + + # CMake install tests + cd ../libs/$SELF/test/cmake_test && mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ + cmake -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_PREFIX_PATH=~/.local .. + cmake --build . + ctest --output-on-failure + +fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..22551ae --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,522 @@ +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2022 Alan de Freitas +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) + +name: CI + +on: + pull_request: + push: + branches: + - master + - develop + - feature/** + +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + +env: + GIT_FETCH_JOBS: 8 + NET_RETRY_COUNT: 5 + DEFAULT_BUILD_VARIANT: debug,release + +jobs: + posix: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + # Linux, gcc + - toolset: gcc-4.8 + cxxstd: "11" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - g++-4.8 + - toolset: gcc-4.9 + cxxstd: "11" + os: ubuntu-22.04 + container: ubuntu:16.04 + install: + - g++-4.9 + - toolset: gcc-5 + cxxstd: "11,14" + os: ubuntu-22.04 + container: ubuntu:16.04 + install: + - g++-5 + - toolset: gcc-6 + cxxstd: "11,14" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - g++-6 + - toolset: gcc-7 + cxxstd: "14,17" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - g++-7 + - toolset: gcc-8 + cxxstd: "17" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - g++-8 + - toolset: gcc-9 + cxxstd: "17" + os: ubuntu-22.04 + install: + - g++-9 + - toolset: gcc-10 + cxxstd: "17" + os: ubuntu-22.04 + install: + - g++-10 + - toolset: gcc-11 + cxxstd: "17,20" + os: ubuntu-22.04 + install: + - g++-11 + sources: + - "ppa:ubuntu-toolchain-r/test" + - name: UBSAN + toolset: gcc-11 + cxxstd: "17,20" + ubsan: 1 + os: ubuntu-22.04 + install: + - g++-11 + sources: + - "ppa:ubuntu-toolchain-r/test" + + # Linux, clang + - toolset: clang + compiler: clang++-3.8 + cxxstd: "11" + os: ubuntu-22.04 + container: ubuntu:16.04 + install: + - clang-3.8 + - toolset: clang + compiler: clang++-4.0 + cxxstd: "11,14" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - clang-4.0 + - toolset: clang + compiler: clang++-5.0 + cxxstd: "11,14" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - clang-5.0 + - toolset: clang + compiler: clang++-6.0 + cxxstd: "14,17" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - clang-6.0 + - toolset: clang + compiler: clang++-7 + cxxstd: "17" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - clang-7 + - toolset: clang + compiler: clang++-8 + cxxstd: "17" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - clang-8 + - g++-7 + gcc_toolchain: 7 + - toolset: clang + compiler: clang++-9 + cxxstd: "14,17" + os: ubuntu-22.04 + container: ubuntu:18.04 + install: + - clang-9 + - toolset: clang + compiler: clang++-10 + cxxstd: "14,17" + os: ubuntu-20.04 + install: + - clang-10 + - toolset: clang + compiler: clang++-11 + cxxstd: "14,17" + os: ubuntu-20.04 + install: + - clang-11 +# clang 12 tested on drone +# - toolset: clang +# compiler: clang++-12 +# cxxstd: "17,20" +# os: ubuntu-22.04 +# install: +# - clang-12 +# - toolset: clang +# compiler: clang++-12 +# cxxstd: "17,20" +# cxxflags: -stdlib=libc++ +# linkflags: -stdlib=libc++ +# os: ubuntu-20.04 +# install: +# - clang-12 +# - libc++-12-dev +# - libc++abi-12-dev +# - name: UBSAN +# toolset: clang +# compiler: clang++-12 +# cxxstd: "17,20" +# cxxflags: -stdlib=libc++ +# linkflags: -stdlib=libc++ +# ubsan: 1 +# os: ubuntu-20.04 +# install: +# - clang-12 +# - libc++-12-dev +# - libc++abi-12-dev + + - toolset: clang + cxxstd: "11,14,17" + os: macos-11 + + - name: CMake tests + cmake_tests: 1 + os: ubuntu-22.04 + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + container: ${{matrix.container}} + + 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}}" ] + then + echo "GHA_CONTAINER=${{matrix.container}}" >> $GITHUB_ENV + if [ -f "/etc/debian_version" ] + then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common tzdata wget curl apt-transport-https make apt-file unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python ruby cpio gcc-multilib g++-multilib pkgconf python3 ccache libpython-dev + + # install pip: + python_version=$(python3 -c 'import sys; print("{0.major}.{0.minor}".format(sys.version_info))') + if [[ ${python_version} =~ ^3\.[0-5]$ ]]; then + true + else + apt-get install -y python3-distutils + fi + wget https://bootstrap.pypa.io/pip/$python_version/get-pip.py + python3 get-pip.py + + # install git: + # apt-get install -y git + apt-add-repository ppa:git-core/ppa + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update && apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y git + + # install cmake: + # apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y cmake + sudo pip3 install cmake + fi + fi + git config --global pack.threads 0 + + - uses: actions/checkout@v2 + + - name: Install packages + if: matrix.install + run: | + SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) + SOURCES=(${{join(matrix.sources, ' ')}}) + for key in "${SOURCE_KEYS[@]}" + do + for i in {1..$NET_RETRY_COUNT} + do + wget -O - "$key" | sudo apt-key add - && break || sleep 2 + done + done + if [ ${#SOURCES[@]} -gt 0 ] + then + APT_ADD_REPO_COMMON_ARGS=("-y") + APT_ADD_REPO_HAS_SOURCE_ARGS=0 + SOFTWARE_PROPERTIES_VERSION="$(dpkg-query --showformat='${Version}' --show software-properties-common)" + if dpkg --compare-versions "$SOFTWARE_PROPERTIES_VERSION" ge "0.96.24.20" + then + APT_ADD_REPO_COMMON_ARGS+=("-n") + fi + if dpkg --compare-versions "$SOFTWARE_PROPERTIES_VERSION" ge "0.98.10" + then + APT_ADD_REPO_HAS_SOURCE_ARGS=1 + fi + for source in "${SOURCES[@]}" + do + for i in {1..$NET_RETRY_COUNT} + do + APT_ADD_REPO_ARGS=("${APT_ADD_REPO_COMMON_ARGS[@]}") + if [ $APT_ADD_REPO_HAS_SOURCE_ARGS -ne 0 ] + then + case "$source" in + "ppa:"*) + APT_ADD_REPO_ARGS+=("-P") + ;; + "deb "*) + APT_ADD_REPO_ARGS+=("-S") + ;; + *) + APT_ADD_REPO_ARGS+=("-U") + ;; + esac + fi + APT_ADD_REPO_ARGS+=("$source") + sudo -E apt-add-repository "${APT_ADD_REPO_ARGS[@]}" && break || sleep 2 + done + done + fi + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y ${{join(matrix.install, ' ')}} + + - name: Setup GCC Toolchain + if: matrix.gcc_toolchain + run: | + GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" + echo "GCC_TOOLCHAIN_ROOT=\"$GCC_TOOLCHAIN_ROOT\"" >> $GITHUB_ENV + MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" + mkdir -p "$GCC_TOOLCHAIN_ROOT" + ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" + ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" + mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" + ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" + + - name: Setup 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 + BUILD_JOBS=$((nproc || sysctl -n hw.ncpu) 2> /dev/null) + echo "BUILD_JOBS=$BUILD_JOBS" >> $GITHUB_ENV + echo "CMAKE_BUILD_PARALLEL_LEVEL=$BUILD_JOBS" >> $GITHUB_ENV + DEPINST_ARGS=() + GIT_VERSION="$(git --version | sed -e 's/git version //')" + if $(dpkg --compare-versions "$GIT_VERSION" ge 2.8.0) + then + DEPINST_ARGS+=("--git_args" "--jobs $GIT_FETCH_JOBS") + fi + cd .. + git clone -b "$BOOST_BRANCH" --depth 1 "https://github.com/boostorg/boost.git" "boost-root" + + cd boost-root + # mkdir -p libs/$LIBRARY + # cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + # git submodule update --init tools/boostdep + git submodule update --init --recursive + mkdir -p libs/$SELF + cp -r $GITHUB_WORKSPACE/* libs/$SELF + + DEPINST_ARGS+=("$LIBRARY") + python tools/boostdep/depinst/depinst.py "${DEPINST_ARGS[@]}" + if [ -z "${{matrix.cmake_tests}}" ] + then + ./bootstrap.sh + ./b2 headers + if [ -n "${{matrix.compiler}}" -o -n "$GCC_TOOLCHAIN_ROOT" ] + then + echo -n "using ${{matrix.toolset}} : : ${{matrix.compiler}}" > ~/user-config.jam + if [ -n "$GCC_TOOLCHAIN_ROOT" ] + then + echo -n " : \"--gcc-toolchain=$GCC_TOOLCHAIN_ROOT\" \"--gcc-toolchain=$GCC_TOOLCHAIN_ROOT\"" >> ~/user-config.jam + fi + echo " ;" >> ~/user-config.jam + fi + fi + + - name: Run tests + if: matrix.cmake_tests == '' + run: | + cd ../boost-root + B2_ARGS=("-j" "$BUILD_JOBS" "toolset=${{matrix.toolset}}" "cxxstd=${{matrix.cxxstd}}") + if [ -n "${{matrix.build_variant}}" ] + then + B2_ARGS+=("variant=${{matrix.build_variant}}") + else + B2_ARGS+=("variant=$DEFAULT_BUILD_VARIANT") + fi + if [ -n "${{matrix.threading}}" ] + then + B2_ARGS+=("threading=${{matrix.threading}}") + fi + if [ -n "${{matrix.ubsan}}" ] + then + export UBSAN_OPTIONS="print_stacktrace=1" + B2_ARGS+=("cxxflags=-fsanitize=undefined -fno-sanitize-recover=undefined" "linkflags=-fsanitize=undefined -fuse-ld=gold" "define=UBSAN=1" "debug-symbols=on" "visibility=global") + fi + if [ -n "${{matrix.cxxflags}}" ] + then + B2_ARGS+=("cxxflags=${{matrix.cxxflags}}") + fi + if [ -n "${{matrix.linkflags}}" ] + then + B2_ARGS+=("linkflags=${{matrix.linkflags}}") + fi + B2_ARGS+=("libs/$LIBRARY/test") + ./b2 "${B2_ARGS[@]}" + +# - name: Run CMake tests +# if: matrix.cmake_tests != '' +# run: | +# cd ../boost-root +# git submodule update --init --recursive +# cd libs/$LIBRARY +# mkdir __build__ && cd __build__ +# cmake -DCMAKE_INSTALL_PREFIX=~/.local .. +# cmake --build . --target install + + windows: + strategy: + fail-fast: false + matrix: + include: + #- toolset: msvc-14.1 + # cxxstd: "14,17,latest" + # addrmd: 32,64 + # os: windows-2016 + - toolset: msvc-14.2 + cxxstd: "14,17" + addrmd: 32,64 + os: windows-2019 + - toolset: msvc-14.3 + cxxstd: "17,20" + addrmd: 32,64 + os: windows-2022 + # - toolset: gcc + # cxxstd: "11,14,17" + # addrmd: 64 + # os: windows-2019 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v2 + + - 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 %GIT_FETCH_JOBS%" %LIBRARY% + cmd /c bootstrap + b2 -d0 headers + + - name: Run tests + shell: cmd + run: | + cd ../boost-root + b2 -j %NUMBER_OF_PROCESSORS% libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release + + CMake: + defaults: + run: + shell: bash + + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-22.04, build_shared: ON, build_type: Debug, generator: 'Unix Makefiles' } + - { os: ubuntu-22.04, build_shared: OFF, build_type: Debug, generator: 'Unix Makefiles' } + - { os: windows-2019, build_shared: ON, build_type: Debug, generator: 'Visual Studio 16 2019' } + - { os: windows-2019, build_shared: OFF, build_type: Debug, generator: 'Visual Studio 16 2019' } + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v2 + - name: Fetch Boost.CI + uses: actions/checkout@v2 + 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 + env: {B2_DONT_BOOTSTRAP: 1} + run: source ci/github/install.sh + +# - name: Run CMake tests +# run: | +# cd "$BOOST_ROOT" +# mkdir __build_cmake_test__ && cd __build_cmake_test__ +# cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DBUILD_TESTING=ON -DBoost_VERBOSE=ON .. +# cmake --build . --target tests boost_url_tests boost_url_limits boost_url_extra --config ${{matrix.build_type}} +# ctest --output-on-failure --build-config ${{matrix.build_type}} +# - name: Run CMake subdir tests +# run: | +# cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder +# [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_subdir_test" +# cd "$cmake_test_folder" +# mkdir __build_cmake_subdir_test__ && cd __build_cmake_subdir_test__ +# cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=OFF -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} .. +# cmake --build . --config ${{matrix.build_type}} +# ctest --output-on-failure --build-config ${{matrix.build_type}} +# - name: Install Library +# run: | +# cd "$BOOST_ROOT" +# mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ +# cmake -G "${{matrix.generator}}" -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBOOST_INCLUDE_LIBRARIES=$SELF -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_INSTALL_PREFIX=~/.local -DBoost_VERBOSE=ON -DBoost_DEBUG=ON .. +# cmake --build . --target install --config ${{matrix.build_type}} +# - name: Run CMake install tests +# run: | +# cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_test" # New unified folder +# [ -d "$cmake_test_folder" ] || cmake_test_folder="$BOOST_ROOT/libs/$SELF/test/cmake_install_test" +# cd "$cmake_test_folder" +# mkdir __build_cmake_install_test__ && cd __build_cmake_install_test__ +# cmake -G "${{matrix.generator}}" -DBOOST_CI_INSTALL_TEST=ON -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.build_shared}} -DCMAKE_PREFIX_PATH=~/.local .. +# cmake --build . --config ${{matrix.build_type}} +# ctest --output-on-failure --build-config ${{matrix.build_type}} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5d47642..0000000 --- a/.travis.yml +++ /dev/null @@ -1,275 +0,0 @@ -# Copyright 2016 Peter Dimov -# Copyright 2017 - 2019 James E. King III -# Copyright 2020 Krystian Stasiowski -# 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) - -# -# Generic Travis CI build script for boostorg repositories -# See: https://github.com/boostorg/boost-ci -# -# Instructions for customizing this script for your library: -# -# 1. Customize the compilers and language levels you want in the 'jobs'. -# 2. If you have more than include/, src/, test/, example/, examples/, or -# tools/ directories, modify your Travis CI project and add the environment -# variable DEPINST. For example if your build uses code in "bench/" and -# "fog/" directories, then set DEPINST to the following: -# --include bench --include fog -# 3. If you want to enable Coverity Scan, you need to provide the environment -# variables COVERITY_SCAN_TOKEN and COVERITY_SCAN_NOTIFICATION_EMAIL in -# your github settings. -# 4. If you want to enable a big-endian build, you need to uncomment the -# big-endian build job. -# 5. Enable pull request builds in your boostorg/ account. -# -# That's it - the scripts will do everything else for you. - -dist: xenial -language: cpp - -env: - global: - # see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties - # - B2_ADDRESS_MODEL=address-model=64,32 - # - B2_LINK=link=shared,static - # - B2_THREADING=threading=multi,single - - B2_VARIANT=variant=release - -install: - - git clone https://github.com/boostorg/boost-ci.git boost-ci - - cp -pr boost-ci/ci boost-ci/.codecov.yml . - - source ci/travis/install.sh - -addons: - apt: - packages: - - binutils-gold - - gdb - - libc6-dbg - - qemu-user-static - -services: - - docker - -branches: - only: - - master - - develop - - /bugfix\/.*/ - - /feature\/.*/ - - /fix\/.*/ - - /pr\/.*/ - -script: - - cd $BOOST_ROOT/libs/$SELF - - ci/travis/build.sh - -# -# Default toolsets in Ubuntu -# -# trusty xenial bionic -# 14.04 16.04 18.04 -# ------ ------ ------ -# clang 3.4 3.8 6.0 -# gcc 4.8.2 5.3.1 7.3.0 -# - -anchors: - clang-38: &clang-38 { apt: { packages: [ "clang-3.8", - "libstdc++-6-dev" ], sources: [ "llvm-toolchain-xenial-3.8", - "ubuntu-toolchain-r-test" ] } } - clang-4: &clang-4 { apt: { packages: [ "clang-4.0", - "libstdc++-6-dev" ], sources: [ "llvm-toolchain-xenial-4.0", - "ubuntu-toolchain-r-test" ] } } - clang-5: &clang-5 { apt: { packages: [ "clang-5.0", - "libstdc++-7-dev" ], sources: [ "llvm-toolchain-xenial-5.0", - "ubuntu-toolchain-r-test" ] } } - clang-6: &clang-6 { apt: { packages: [ "clang-6.0", - "libc6-dbg", - "libc++-dev", - "libstdc++-8-dev" ], sources: [ "llvm-toolchain-xenial-6.0", - "ubuntu-toolchain-r-test" ] } } - clang-7: &clang-7 { apt: { packages: [ "clang-7", - "libc6-dbg", - "libc++-dev", - "libstdc++-8-dev" ], sources: [ "llvm-toolchain-xenial-7", - "ubuntu-toolchain-r-test" ] } } - clang-8: &clang-8 { apt: { packages: [ "clang-8", - "libc6-dbg", - "libc++-dev", - "libstdc++-8-dev" ], sources: [ "llvm-toolchain-xenial-8", - "ubuntu-toolchain-r-test" ] } } - - gcc-48: &gcc-48 { apt: { packages: [ "g++-4.8" ] } } - gcc-49: &gcc-49 { apt: { packages: [ "g++-4.9" ], sources: [ "ubuntu-toolchain-r-test" ] } } - gcc-5: &gcc-5 { apt: { packages: [ "g++-5" ] } } - gcc-6: &gcc-6 { apt: { packages: [ "g++-6" ], sources: [ "ubuntu-toolchain-r-test" ] } } - gcc-7: &gcc-7 { apt: { packages: [ "g++-7" ], sources: [ "ubuntu-toolchain-r-test" ] } } - gcc-8: &gcc-8 { apt: { packages: [ "g++-8" ], sources: [ "ubuntu-toolchain-r-test" ] } } - gcc-9: &gcc-9 { apt: { packages: [ "g++-9" ], sources: [ "ubuntu-toolchain-r-test" ] } } - -jobs: - allow_failures: - - env: - - COPY="all the environment settings from your job" - - include: - # coverage - - os: linux - env: - - COMMENT=codecov.io - - B2_CXXSTD=11 - - B2_TOOLSET=gcc-8 - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - addons: *gcc-8 - script: - - cd $BOOST_ROOT/libs/$SELF - - tools/codecov.sh - - - os: linux - env: - - COMMENT=asan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=11,14 - - B2_CXXFLAGS="address-sanitizer=norecover" - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - addons: *gcc-8 - - - os: linux - env: - - COMMENT=tsan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=11,14 - - B2_CXXFLAGS="thread-sanitizer=norecover" - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - addons: *gcc-8 - - - os: linux - env: - - COMMENT=ubsan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=11,14 - - B2_CXXFLAGS="undefined-sanitizer=norecover" - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - - B2_LINKFLAGS="linkflags=-fuse-ld=gold" - - UBSAN_OPTIONS=print_stacktrace=1 - addons: *gcc-8 - - - os: linux - env: - - COMMENT=valgrind - - B2_TOOLSET=clang-6.0 - - B2_CXXSTD=11,14 - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - - B2_VARIANT=variant=debug - - B2_TESTFLAGS=testing.launcher=valgrind - - VALGRIND_OPTS=--error-exitcode=1 - addons: *clang-6 - script: - - cd $BOOST_ROOT/libs/$SELF - - ci/travis/valgrind.sh - - # libstdc++ - - { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI - env: [ "B2_TOOLSET=gcc-4.8", "B2_CXXSTD=11" ], addons: *gcc-48 } - - { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI - env: [ "B2_TOOLSET=gcc-4.9", "B2_CXXSTD=11" ], addons: *gcc-49 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-5", "B2_CXXSTD=11,14" ], addons: *gcc-5 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-6", "B2_CXXSTD=11,14" ], addons: *gcc-6 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-7", "B2_CXXSTD=14,17" ], addons: *gcc-7 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-8", "B2_CXXSTD=17" ], addons: *gcc-8 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-9", "B2_CXXSTD=17" ], addons: *gcc-9 } - - { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI - env: [ "B2_TOOLSET=clang-3.8", "B2_CXXSTD=11" ], addons: *clang-38 } - - { os: "linux", env: [ "B2_TOOLSET=clang-4.0", "B2_CXXSTD=11,14" ], addons: *clang-4 } - - { os: "linux", env: [ "B2_TOOLSET=clang-5.0", "B2_CXXSTD=11,14" ], addons: *clang-5 } - - { os: "linux", env: [ "B2_TOOLSET=clang-6.0", "B2_CXXSTD=14,17" ], addons: *clang-6 } - - { os: "linux", env: [ "B2_TOOLSET=clang-7", "B2_CXXSTD=17" ], addons: *clang-7 } - - { os: "linux", env: [ "B2_TOOLSET=clang-8", "B2_CXXSTD=17" ], addons: *clang-8 } - - - os: "linux" - env: ["B2_TOOLSET=clang-9", "B2_CXXSTD=11,14,17"] - addons: - apt: - sources: - - ubuntu-toolchain-r-test - - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main' - key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' - packages: - - clang-9 - - libc6-dbg - - libc++-dev - - libstdc++-8-dev - - # libc++ - - { os: "linux", env: [ "B2_TOOLSET=clang-6.0", "B2_CXXSTD=11,14", - "B2_CXXFLAGS=-stdlib=libc++" ], addons: *clang-6 } - - { os: "osx" , env: [ "B2_TOOLSET=clang", "B2_CXXSTD=11,17" ] } - - # to enable Intel ICC define INTEL_ICC_SERIAL_NUMBER and the following (under development): - # - { os: "linux", env: [ "B2_TOOLSET=intel-linux", "B2_CXXSTD=11,14,17" ], addons: *gcc-7, - # script: cd $BOOST_ROOT/libs/$SELF && ci/travis/intelicc.sh } - - # uncomment to enable a big-endian build job, just note that it is 5-10 times slower - # than a regular build and travis has a 50 minute time limit per job - # - os: linux - # env: - # - COMMENT=big-endian - # - B2_CXXSTD=03 - # - B2_TOOLSET=gcc - # - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - # - BDDE_OS=red - # - BDDE_ARCH=ppc64 - # script: - # - cd $BOOST_ROOT/libs/$SELF - # - ci/travis/bdde.sh - - # - os: linux - # env: - # - COMMENT=cppcheck - # script: - # - cd $BOOST_ROOT/libs/$SELF - # - ci/travis/cppcheck.sh - - #################### Jobs to run on pushes to master, develop ################### - - # Coverity Scan - - os: linux - if: (env(COVERITY_SCAN_NOTIFICATION_EMAIL) IS present) AND (branch IN (develop, master)) AND (type IN (cron, push)) - env: - - COMMENT="Coverity Scan" - - B2_TOOLSET=clang - script: - - cd $BOOST_ROOT/libs/$SELF - - ci/travis/coverity.sh - - # Standalone tests for StaticString - - { os: "linux", env: [ "COMMENT=STANDALONE", "B2_TOOLSET=gcc-7", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ], addons: *gcc-7 } - - { os: "linux", env: [ "COMMENT=STANDALONE", "B2_TOOLSET=gcc-8", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ], addons: *gcc-8 } - - { os: "linux", env: [ "COMMENT=STANDALONE", "B2_TOOLSET=gcc-9", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ], addons: *gcc-9 } - - { os: "linux", env: [ "COMMENT=STANDALONE", "B2_TOOLSET=clang-6.0", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ], addons: *clang-6 } - - { os: "linux", env: [ "COMMENT=STANDALONE", "B2_TOOLSET=clang-7", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ], addons: *clang-7 } - - { os: "linux", env: [ "COMMENT=STANDALONE", "B2_TOOLSET=clang-8", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ], addons: *clang-8 } - - os: "linux" - env: ["COMMENT=STANDALONE", "B2_TOOLSET=clang-9", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17"] - addons: - apt: - sources: - - ubuntu-toolchain-r-test - - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main' - key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' - packages: - - clang-9 - - libc6-dbg - - libc++-dev - - libstdc++-8-dev - - - { os: "osx" , env: [ "COMMENT=STANDALONE", "B2_TOOLSET=clang", "B2_DEFINES=define=BOOST_STATIC_STRING_STANDALONE", "B2_CXXSTD=17" ] } - -notifications: - email: - false diff --git a/CMakeLists.txt b/CMakeLists.txt index ecd71b8..fabfdfa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,32 +1,5 @@ -# Generated by `boostdep --cmake static_string` -# Copyright 2020 Peter Dimov -# Distributed under the Boost Software License, Version 1.0. -# https://www.boost.org/LICENSE_1_0.txt - -cmake_minimum_required(VERSION 3.5...3.16) - -project(boost_static_string VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) - -if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) - -add_library(boost_static_string INTERFACE) -add_library(Boost::static_string ALIAS boost_static_string) - -target_include_directories(boost_static_string INTERFACE include) - -target_link_libraries(boost_static_string - INTERFACE - Boost::assert - Boost::container_hash - Boost::static_assert - Boost::throw_exception - Boost::utility -) - -else() - # -# Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com) +# Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com) # # 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) @@ -34,140 +7,111 @@ else() # Official repository: https://github.com/boostorg/static_string # -#------------------------------------------------------------------------------- - -function (DoGroupSources curdir rootdir folder) - file (GLOB children RELATIVE ${PROJECT_SOURCE_DIR}/${curdir} ${PROJECT_SOURCE_DIR}/${curdir}/*) - foreach (child ${children}) - if (IS_DIRECTORY ${PROJECT_SOURCE_DIR}/${curdir}/${child}) - DoGroupSources (${curdir}/${child} ${rootdir} ${folder}) - elseif (${child} STREQUAL "CMakeLists.txt") - source_group("" FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child}) - else() - string (REGEX REPLACE ^${rootdir} ${folder} groupname ${curdir}) - string (REPLACE "/" "\\" groupname ${groupname}) - source_group (${groupname} FILES ${PROJECT_SOURCE_DIR}/${curdir}/${child}) - endif() - endforeach() -endfunction() - -function (GroupSources curdir folder) - DoGroupSources (${curdir} ${curdir} ${folder}) -endfunction() - -#------------------------------------------------------------------------------- -# -# StaticString -# -#------------------------------------------------------------------------------- - -set_property (GLOBAL PROPERTY USE_FOLDERS ON) - -if (MSVC) - set (CMAKE_VERBOSE_MAKEFILE FALSE) +cmake_minimum_required(VERSION 3.5...3.16) - add_definitions ( - -D_WIN32_WINNT=0x0601 - ) +project(boost_static_string VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) - add_compile_options( - /permissive- # strict C++ - /W4 # enable all warnings - /MP # Multi-processor compilation +set(BOOST_STATIC_STRING_IS_ROOT OFF) +if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) + set(BOOST_STATIC_STRING_IS_ROOT ON) +endif () + +if (BOOST_STATIC_STRING_IS_ROOT) + include(CTest) +endif () + +# Options +if (NOT BOOST_SUPERPROJECT_VERSION) + option(BOOST_STATIC_STRING_INSTALL "Install boost::static_string files" ${BOOST_STATIC_STRING_IS_ROOT}) + option(BOOST_STATIC_STRING_BUILD_TESTS "Build boost::static_string tests" ${BUILD_TESTING}) +else () + set(BOOST_STATIC_STRING_BUILD_TESTS ${BUILD_TESTING}) +endif () + +# Find boost +if (BOOST_SUPERPROJECT_VERSION) + set(BOOST_STATIC_STRING_FIND_PACKAGE_BOOST OFF) +elseif (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../CMakeLists.txt" AND + EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../Jamroot" AND + EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../boost-build.jam" AND + EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../bootstrap.sh" AND + EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../../libs") + set(BOOST_STATIC_STRING_FIND_PACKAGE_BOOST OFF) +else () + set(BOOST_STATIC_STRING_FIND_PACKAGE_BOOST ON) +endif () + +if (BOOST_STATIC_STRING_FIND_PACKAGE_BOOST) + find_package(Boost 1.78.0 REQUIRED COMPONENTS container) +elseif (BOOST_STATIC_STRING_IS_ROOT) + set(BOOST_STATIC_STRING_UNIT_TEST_LIBRARIES core) + set(BOOST_INCLUDE_LIBRARIES static_string assert container_hash static_assert throw_exception utility ${BOOST_STATIC_STRING_UNIT_TEST_LIBRARIES}) + set(BOOST_EXCLUDE_LIBRARIES static_string) + set(CMAKE_FOLDER Dependencies) + add_subdirectory(../.. Dependencies/boost EXCLUDE_FROM_ALL) + unset(CMAKE_FOLDER) +endif () + +# Sources +include(GNUInstallDirs) +file(GLOB_RECURSE BOOST_STATIC_STRING_HEADERS CONFIGURE_DEPENDS + include/boost/*.hpp + include/boost/*.ipp + include/boost/*.natvis ) - set (Boost_USE_STATIC_LIBS ON) - set (Boost_USE_STATIC_RUNTIME ON) - - set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd") - set (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Ob2 /Oi /Ot /GL /MT") - set (CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} /Oi /Ot /MT") - - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") - set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG") - - # for RelWithDebInfo builds, disable incremental linking - # since CMake sets it ON by default for that build type and it - # causes warnings - # - string (REPLACE "/INCREMENTAL" "/INCREMENTAL:NO" replacement_flags - ${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO}) - set (CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO ${replacement_flags}) - -else() - set (THREADS_PREFER_PTHREAD_FLAG ON) - find_package (Threads) - - set( CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wno-unused-parameter") +set_property(GLOBAL PROPERTY USE_FOLDERS ON) +source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/include/boost PREFIX "" FILES ${BOOST_STATIC_STRING_HEADERS}) +source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}/src PREFIX "" FILES ${BOOST_STATIC_STRING_SOURCES}) - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wrange-loop-analysis") - endif () -endif() - -# Must come before Boost includes, otherwise the -# IDE sees the wrong file due to boost/ symlinks. -include_directories (include) - -#------------------------------------------------------------------------------- -# -# Boost -# -#------------------------------------------------------------------------------- - -get_filename_component (BOOST_ROOT ../../ ABSOLUTE) - -# VFALCO I want static but "b2 stage" builds a minimal set which excludes static -add_definitions (-DBOOST_ALL_STATIC_LINK=1) - -include_directories (${BOOST_ROOT}) - -link_directories(${BOOST_ROOT}/stage/lib) - -#------------------------------------------------------------------------------- - -if ("${VARIANT}" STREQUAL "coverage") - if (MSVC) - else() - set (CMAKE_BUILD_TYPE DEBUG) - set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2 --coverage") - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage") - endif() - -elseif ("${VARIANT}" STREQUAL "ubasan") - if (MSVC) - else() - set (CMAKE_BUILD_TYPE RELWITHDEBINFO) - set (CMAKE_CXX_FLAGS - "${CMAKE_CXX_FLAGS} -msse4.2 -funsigned-char -fno-omit-frame-pointer -fsanitize=address,undefined -fno-sanitize-recover=address,undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/tools/blacklist.supp") - set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address,undefined -fno-sanitize-recover=address,undefined") - endif() - -elseif ("${VARIANT}" STREQUAL "debug") - set (CMAKE_BUILD_TYPE DEBUG) - -elseif ("${VARIANT}" STREQUAL "release") - set (CMAKE_BUILD_TYPE RELEASE) - -endif() - -#------------------------------------------------------------------------------- - -#GroupSources (test "/") - -#------------------------------------------------------------------------------- -# -# Tests and examples -# - -#include_directories (.) - -file (GLOB_RECURSE PROJECT_FILES - ${PROJECT_SOURCE_DIR}/include/boost/static_string/*.hpp - ${PROJECT_SOURCE_DIR}/include/boost/static_string/*.ipp -) +# Target +add_library(boost_static_string INTERFACE) +add_library(Boost::static_string ALIAS boost_static_string) -add_subdirectory (test) +target_compile_features(boost_static_string INTERFACE cxx_constexpr) +if (BOOST_SUPERPROJECT_VERSION) + target_include_directories(boost_static_string INTERFACE "${PROJECT_SOURCE_DIR}/include") +else () + target_include_directories(boost_static_string + INTERFACE + "$" + "$" + ) +endif () + +if (BOOST_STATIC_STRING_FIND_PACKAGE_BOOST) + target_link_libraries(boost_static_string + INTERFACE + Boost::headers + ) +else () + target_link_libraries(boost_static_string + INTERFACE + Boost::assert + Boost::container_hash + Boost::static_assert + Boost::throw_exception + Boost::utility + ) +endif () + +if (BOOST_STATIC_STRING_INSTALL AND NOT BOOST_SUPERPROJECT_VERSION) + install(TARGETS boost_static_string + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" + LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}" + ) + + install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/boost + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING + PATTERN "*.hpp" + PATTERN "*.ipp" + ) +endif () + + +if (BOOST_STATIC_STRING_BUILD_TESTS) + add_subdirectory(test) +endif () -endif() diff --git a/include/boost/static_string/static_string.hpp b/include/boost/static_string/static_string.hpp index d1f4943..e69354c 100644 --- a/include/boost/static_string/static_string.hpp +++ b/include/boost/static_string/static_string.hpp @@ -257,11 +257,8 @@ class static_string_base } size_type size_ = 0; -#ifdef BOOST_STATIC_STRING_CPP20 - value_type data_[N + 1]; -#else + value_type data_[N + 1]{}; -#endif }; // Optimization for when the size is 0 @@ -1060,6 +1057,33 @@ class basic_static_string // //-------------------------------------------------------------------------- + /** Assign to the string. + + Replaces the contents with those of + the string `s`. + + @par Complexity + + Linear in `s.size()`. + + @par Exception Safety + + Strong guarantee. + + @return `*this` + + @param s The string to replace + the contents with. + + @throw std::length_error `s.size() > max_size()`. + */ + BOOST_STATIC_STRING_CPP14_CONSTEXPR + basic_static_string& + operator=(const basic_static_string& s) + { + return assign(s); + } + /** Assign to the string. Replaces the contents with those of diff --git a/meta/libraries.json b/meta/libraries.json index 8124b3f..db0db91 100644 --- a/meta/libraries.json +++ b/meta/libraries.json @@ -11,7 +11,7 @@ "String" ], "maintainers": [ - "Krystian Stasiowski ", + "Alan de Freitas ", "Vinnie Falco " ], "cxxstd": "11" diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 844ed47..cee7ae2 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com) +# Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com) # # 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) @@ -7,16 +7,21 @@ # Official repository: https://github.com/boostorg/static_string # -GroupSources (include/boost/static_string static_string) -GroupSources (test "/") +set(BOOST_STATIC_STRING_TESTS_FILES + CMakeLists.txt + Jamfile + constexpr_tests.hpp + compile_fail.hpp + static_string.cpp + ) -add_executable (tests - ${PROJECT_FILES} - Jamfile - static_string.cpp -) +source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${BOOST_STATIC_STRING_TESTS_FILES}) +add_executable(boost_static_string_tests ${BOOST_STATIC_STRING_TESTS_FILES}) -target_link_libraries(tests - ) - -set_property(TARGET tests PROPERTY FOLDER "tests") +# The include dependencies are found in the CMakeLists.txt +# of the root project directory. +# See: BOOST_STATIC_STRING_UNIT_TEST_LIBRARIES +target_link_libraries(boost_static_string_tests PRIVATE + Boost::static_string + Boost::core) +add_test(NAME boost_static_string_tests COMMAND boost_static_string_tests) diff --git a/test/static_string.cpp b/test/static_string.cpp index a23f25d..8ef6481 100644 --- a/test/static_string.cpp +++ b/test/static_string.cpp @@ -14,6 +14,7 @@ #include "compile_fail.hpp" #include +#include #include #include #include @@ -412,6 +413,7 @@ testAssignment() BOOST_TEST(static_string<4>{}.assign(cs.begin(), cs.end()) == "abcd"); BOOST_TEST(static_string<4>{"*"}.assign(cs.begin(), cs.end()) == "abcd"); BOOST_TEST_THROWS(static_string<2>{"*"}.assign(cs.begin(), cs.end()), std::length_error); + ignore_unused(s); } // assign(std::initializer_list ilist) @@ -1050,6 +1052,7 @@ testInsert() BOOST_TEST_THROWS( (s2.insert(6, "__")), std::out_of_range); + ignore_unused(s3); } { static_string<7> s1("12345"); @@ -2003,6 +2006,7 @@ testAppend() cs.begin() + 2, cs.begin() + 4) == "abcd"); BOOST_TEST_THROWS(static_string<2>{"ab"}.append( cs.begin() + 2, cs.begin() + 4), std::length_error); + ignore_unused(s); } // append(std::initializer_list ilist)