forked from boostorg/static_string
Compare commits
11 Commits
develop
...
boost-1.84
Author | SHA1 | Date | |
---|---|---|---|
ac84c4f40e | |||
269987446e | |||
82ff4e0679 | |||
9c3d5febe7 | |||
0c914ff05b | |||
bfce6eea90 | |||
ffce33d483 | |||
c4f6491537 | |||
25579e482f | |||
3e9489a7af | |||
7822f1b991 |
119
.appveyor.yml
119
.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_CXXFLAGS: -permissive-
|
||||
B2_CXXSTD: 2a
|
||||
B2_TOOLSET: msvc-14.1
|
||||
|
||||
- FLAVOR: Visual Studio 2017 C++17
|
||||
- FLAVOR: Visual Studio 2017 C++14/17
|
||||
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||
B2_ADDRESS_MODEL: address-model=64
|
||||
B2_CXXSTD: 17
|
||||
B2_TOOLSET: msvc-14.1
|
||||
B2_VARIANT: variant=debug
|
||||
|
||||
- FLAVOR: Visual Studio 2017 C++14 (Default)
|
||||
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
|
||||
|
@ -1,276 +0,0 @@
|
||||
# Copyright 2015-2019 Rene Rivera.
|
||||
# Copyright 2019 Mateusz Loskot <mateusz at loskot dot net>
|
||||
# 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/<library> 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'
|
25
.codecov.yml
Normal file
25
.codecov.yml
Normal file
@ -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/**/*
|
117
.drone.star
Normal file
117
.drone.star
Normal file
@ -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', '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', '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', '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', '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', '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', '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', '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', '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', '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', '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")
|
31
.drone/drone.bat
Normal file
31
.drone/drone.bat
Normal file
@ -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
|
||||
|
||||
)
|
236
.drone/drone.sh
Executable file
236
.drone/drone.sh
Executable file
@ -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
|
522
.github/workflows/ci.yml
vendored
Normal file
522
.github/workflows/ci.yml
vendored
Normal file
@ -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 " : <compileflags>\"--gcc-toolchain=$GCC_TOOLCHAIN_ROOT\" <linkflags>\"--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}}
|
275
.travis.yml
275
.travis.yml
@ -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/<library> 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
|
241
CMakeLists.txt
241
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,112 @@ else()
|
||||
# Official repository: https://github.com/boostorg/static_string
|
||||
#
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
cmake_minimum_required(VERSION 3.5...3.16)
|
||||
|
||||
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()
|
||||
project(boost_static_string VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
|
||||
|
||||
function (GroupSources curdir folder)
|
||||
DoGroupSources (${curdir} ${curdir} ${folder})
|
||||
endfunction()
|
||||
set(BOOST_STATIC_STRING_IS_ROOT OFF)
|
||||
if (CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
||||
set(BOOST_STATIC_STRING_IS_ROOT ON)
|
||||
endif ()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# StaticString
|
||||
#
|
||||
#-------------------------------------------------------------------------------
|
||||
if (BOOST_STATIC_STRING_IS_ROOT)
|
||||
include(CTest)
|
||||
endif ()
|
||||
|
||||
set_property (GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
# 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 ()
|
||||
|
||||
if (MSVC)
|
||||
set (CMAKE_VERBOSE_MAKEFILE FALSE)
|
||||
# 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 ()
|
||||
|
||||
add_definitions (
|
||||
-D_WIN32_WINNT=0x0601
|
||||
)
|
||||
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 ()
|
||||
|
||||
add_compile_options(
|
||||
/permissive- # strict C++
|
||||
/W4 # enable all warnings
|
||||
/MP # Multi-processor compilation
|
||||
# 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_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})
|
||||
|
||||
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")
|
||||
# Target
|
||||
add_library(boost_static_string INTERFACE)
|
||||
add_library(Boost::static_string ALIAS boost_static_string)
|
||||
|
||||
set (CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
|
||||
set (CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG")
|
||||
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
|
||||
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>"
|
||||
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
|
||||
)
|
||||
endif ()
|
||||
|
||||
# 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})
|
||||
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::core
|
||||
Boost::static_assert
|
||||
Boost::throw_exception
|
||||
Boost::utility
|
||||
)
|
||||
endif ()
|
||||
|
||||
else()
|
||||
set (THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package (Threads)
|
||||
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}"
|
||||
)
|
||||
|
||||
set( CMAKE_CXX_FLAGS
|
||||
"${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wextra -Wpedantic -Wno-unused-parameter")
|
||||
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/boost
|
||||
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||
FILES_MATCHING
|
||||
PATTERN "*.hpp"
|
||||
PATTERN "*.ipp"
|
||||
)
|
||||
endif ()
|
||||
|
||||
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)
|
||||
if (BOOST_STATIC_STRING_BUILD_TESTS)
|
||||
add_subdirectory(test)
|
||||
endif ()
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
#
|
||||
# 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
|
||||
)
|
||||
|
||||
add_subdirectory (test)
|
||||
|
||||
endif()
|
||||
|
@ -1,6 +1,7 @@
|
||||
#
|
||||
# Copyright (c) 2013-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
|
||||
# Copyright (c) 2020 Krystian Stasiowski (sdkrystian 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)
|
||||
@ -9,16 +10,17 @@
|
||||
project static_string/doc ;
|
||||
|
||||
import boostbook ;
|
||||
import type ;
|
||||
import os ;
|
||||
import ../../../tools/docca/docca.jam ;
|
||||
|
||||
|
||||
docca.reference reference.qbk
|
||||
:
|
||||
xsl/custom-overrides.xsl
|
||||
[ glob-tree-ex ../include/boost/static_string : *.hpp *.ipp : detail impl ]
|
||||
:
|
||||
<doxygen:param>PROJECT_NAME=StaticString
|
||||
<doxygen:param>PROJECT_BRIEF="String Library"
|
||||
<doxygen:param>PROJECT_BRIEF="Static String Library"
|
||||
<doxygen:param>ALIASES="esafe=\"@par Exception Safety\""
|
||||
<doxygen:param>FILE_PATTERNS=
|
||||
<doxygen:param>EXAMPLE_PATTERNS=
|
||||
@ -90,7 +92,7 @@ boostbook static_string
|
||||
<xsl:param>chapter.autolabel=0
|
||||
<xsl:param>chunk.section.depth=8 # Depth to which sections should be chunked
|
||||
<xsl:param>chunk.first.sections=1 # Chunk the first top-level section?
|
||||
<xsl:param>generate.toc=""
|
||||
<xsl:param>generate.toc="chapter toc,title section nop reference nop"
|
||||
<include>../../../tools/boostbook/dtd
|
||||
:
|
||||
<dependency>images
|
||||
|
@ -147,15 +147,51 @@
|
||||
#endif
|
||||
|
||||
#ifndef BOOST_STATIC_STRING_STANDALONE
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/assert.hpp>
|
||||
#include <boost/container_hash/hash.hpp>
|
||||
#include <boost/static_assert.hpp>
|
||||
#include <boost/utility/string_view.hpp>
|
||||
#include <boost/core/detail/string_view.hpp>
|
||||
#include <boost/throw_exception.hpp>
|
||||
|
||||
#if !defined(BOOST_NO_CXX17_HDR_STRING_VIEW) || \
|
||||
defined(BOOST_STATIC_STRING_CXX17_STRING_VIEW)
|
||||
#include <string_view>
|
||||
#define BOOST_STATIC_STRING_HAS_STD_STRING_VIEW
|
||||
#endif
|
||||
#else
|
||||
#include <cassert>
|
||||
#include <stdexcept>
|
||||
|
||||
/*
|
||||
* Replicate the logic from Boost.Config
|
||||
*/
|
||||
// GNU libstdc++3:
|
||||
#if defined(__GLIBCPP__) || defined(__GLIBCXX__)
|
||||
#if (BOOST_LIBSTDCXX_VERSION < 70100) || (__cplusplus <= 201402L)
|
||||
# define BOOST_STATIC_STRING_NO_CXX17_HDR_STRING_VIEW
|
||||
#endif
|
||||
// libc++:
|
||||
#elif defined(_LIBCPP_VERSION)
|
||||
#if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L)
|
||||
# define BOOST_STATIC_STRING_NO_CXX17_HDR_STRING_VIEW
|
||||
#endif
|
||||
// MSVC uses logic from catch all for BOOST_NO_CXX17_HDR_STRING_VIEW
|
||||
// catch all:
|
||||
#elif !defined(_YVALS) && !defined(_CPPLIB_VER)
|
||||
#if (!defined(__has_include) || (__cplusplus < 201700))
|
||||
# define BOOST_STATIC_STRING_NO_CXX17_HDR_STRING_VIEW
|
||||
#elif !__has_include(<string_view>)
|
||||
# define BOOST_STATIC_STRING_NO_CXX17_HDR_STRING_VIEW
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(BOOST_STATIC_STRING_NO_CXX17_HDR_STRING_VIEW) || \
|
||||
defined(BOOST_STATIC_STRING_CXX17_STRING_VIEW)
|
||||
#include <string_view>
|
||||
#define BOOST_STATIC_STRING_HAS_STD_STRING_VIEW
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Compiler bug prevents constexpr from working with clang 4.x and 5.x
|
||||
@ -192,6 +228,12 @@ defined(BOOST_STATIC_STRING_CPP14)
|
||||
#define BOOST_STATIC_STRING_GCC5_BAD_CONSTEXPR
|
||||
#endif
|
||||
|
||||
// Define the basic string_view type used by the library
|
||||
// Conversions to and from other available string_view types
|
||||
// are still defined.
|
||||
#if !defined(BOOST_STATIC_STRING_STANDALONE) || \
|
||||
defined(BOOST_STATIC_STRING_HAS_STD_STRING_VIEW)
|
||||
#define BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
namespace boost {
|
||||
namespace static_strings {
|
||||
|
||||
@ -205,4 +247,6 @@ using basic_string_view =
|
||||
#endif
|
||||
} // static_strings
|
||||
} // boost
|
||||
#endif
|
||||
|
||||
#endif
|
@ -11,9 +11,24 @@
|
||||
#ifndef BOOST_STATIC_STRING_STATIC_STRING_HPP
|
||||
#define BOOST_STATIC_STRING_STATIC_STRING_HPP
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC system_header
|
||||
// false positives
|
||||
#pragma GCC diagnostic ignored "-Warray-bounds"
|
||||
#pragma GCC diagnostic ignored "-Wrestrict"
|
||||
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 7
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wnoexcept-type"
|
||||
#endif
|
||||
|
||||
// External include guard
|
||||
#ifndef BOOST_STATIC_STRING_CONFIG_HPP
|
||||
#include <boost/static_string/config.hpp>
|
||||
#include <boost/config/workaround.hpp>
|
||||
#endif
|
||||
|
||||
#include <algorithm>
|
||||
@ -22,6 +37,7 @@
|
||||
#include <cwchar>
|
||||
#include <functional>
|
||||
#include <initializer_list>
|
||||
#include <limits>
|
||||
#include <iosfwd>
|
||||
#include <type_traits>
|
||||
|
||||
@ -54,7 +70,7 @@ template<std::size_t N>
|
||||
using static_u32string =
|
||||
basic_static_string<N, char32_t, std::char_traits<char32_t>>;
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_CPP20
|
||||
#ifdef __cpp_char8_t
|
||||
template<std::size_t N>
|
||||
using static_u8string =
|
||||
basic_static_string<N, char8_t, std::char_traits<char8_t>>;
|
||||
@ -111,16 +127,43 @@ struct void_t_helper
|
||||
template<typename... Ts>
|
||||
using void_t = typename void_t_helper<Ts...>::type;
|
||||
|
||||
template <class T, typename CharT, typename = void>
|
||||
struct is_string_like : std::false_type {};
|
||||
|
||||
template<typename T, typename CharT>
|
||||
struct is_string_like<
|
||||
T, CharT,
|
||||
void_t<
|
||||
decltype(std::declval<CharT const*&>() = std::declval<T>().data()),
|
||||
decltype(std::declval<std::size_t&>() = std::declval<T>().size())>>
|
||||
: std::true_type
|
||||
{};
|
||||
|
||||
// Check if a type can be used for templated
|
||||
// overloads string_view_type
|
||||
// This will be used by overloads that accept the string_view types
|
||||
// directly and other convertible types such as std::string.
|
||||
// When no string_view type is available, then we check for the
|
||||
// data and size member functions, and use them directly for assignments.
|
||||
template<typename T, typename CharT, typename Traits, typename = void>
|
||||
struct enable_if_viewable { };
|
||||
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
struct enable_if_viewable<T, CharT, Traits,
|
||||
typename std::enable_if<
|
||||
std::is_convertible<const T&, basic_string_view<CharT, Traits>>::value &&
|
||||
!std::is_convertible<const T&, const CharT*>::value>::type>
|
||||
typename std::enable_if<
|
||||
#if !defined(BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW)
|
||||
is_string_like<T, CharT>::value
|
||||
#elif defined(BOOST_STATIC_STRING_STANDALONE)
|
||||
std::is_convertible<const T&, std::basic_string_view<CharT, Traits>>::value &&
|
||||
!std::is_convertible<const T&, const CharT*>::value
|
||||
#else
|
||||
(
|
||||
std::is_convertible<const T&, basic_string_view<CharT, Traits>>::value ||
|
||||
std::is_convertible<const T&, core::basic_string_view<CharT>>::value
|
||||
) &&
|
||||
!std::is_convertible<const T&, const CharT*>::value
|
||||
#endif
|
||||
>::type>
|
||||
{
|
||||
using type = void;
|
||||
};
|
||||
@ -128,6 +171,59 @@ struct enable_if_viewable<T, CharT, Traits,
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
using enable_if_viewable_t = typename enable_if_viewable<T, CharT, Traits>::type;
|
||||
|
||||
// The common string_view type used in private operations with enable_if_viewable_t
|
||||
// - T const& itself when no string_view type is available
|
||||
// - basic_string_view (boost::string_view or std::string_view) when in
|
||||
// standalone because core::detail::string_view is unavailable
|
||||
// - core::detail::basic_string_view otherwise because it's convertible
|
||||
// to and from most types, including std::string_view
|
||||
// After converting a parameter to a common_string_view_type reference, we
|
||||
// can use the data() and size() member functions.
|
||||
#if !defined(BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW)
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
using common_string_view_type = T const&;
|
||||
#elif defined(BOOST_STATIC_STRING_STANDALONE)
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
using common_string_view_type = basic_string_view<CharT, Traits>;
|
||||
#else
|
||||
template <class T, typename CharT, typename Traits, typename = void>
|
||||
struct common_string_view_type_impl {};
|
||||
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
struct common_string_view_type_impl<
|
||||
T, CharT, Traits,
|
||||
typename std::enable_if<
|
||||
is_string_like<T, CharT>::value &&
|
||||
!std::is_convertible<const T&, basic_string_view<CharT, Traits>>::value &&
|
||||
!std::is_convertible<const T&, core::basic_string_view<CharT>>::value>::type>
|
||||
{
|
||||
using type = T const&;
|
||||
};
|
||||
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
struct common_string_view_type_impl<
|
||||
T, CharT, Traits,
|
||||
typename std::enable_if<
|
||||
std::is_convertible<const T&, basic_string_view<CharT, Traits>>::value &&
|
||||
!std::is_convertible<const T&, core::basic_string_view<CharT>>::value>::type>
|
||||
{
|
||||
using type = basic_string_view<CharT, Traits>;
|
||||
};
|
||||
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
struct common_string_view_type_impl<
|
||||
T, CharT, Traits,
|
||||
typename std::enable_if<
|
||||
std::is_convertible<const T&, core::basic_string_view<CharT>>::value>::type>
|
||||
{
|
||||
using type = core::basic_string_view<CharT>;
|
||||
};
|
||||
|
||||
template<typename T, typename CharT, typename Traits>
|
||||
using common_string_view_type = typename common_string_view_type_impl<T, CharT, Traits>::type;
|
||||
#endif
|
||||
|
||||
|
||||
// Simplified check for if a type is an iterator
|
||||
template<typename T, typename = void>
|
||||
struct is_iterator : std::false_type { };
|
||||
@ -257,11 +353,8 @@ public:
|
||||
}
|
||||
|
||||
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
|
||||
@ -867,9 +960,11 @@ public:
|
||||
using const_reverse_iterator =
|
||||
std::reverse_iterator<const_iterator>;
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
/// The string view type.
|
||||
using string_view_type =
|
||||
basic_string_view<value_type, traits_type>;
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
@ -1060,6 +1155,33 @@ public:
|
||||
//
|
||||
//--------------------------------------------------------------------------
|
||||
|
||||
/** 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
|
||||
@ -1280,7 +1402,7 @@ public:
|
||||
basic_static_string&
|
||||
assign(const basic_static_string& s) noexcept
|
||||
{
|
||||
if (this == &s)
|
||||
if (data() == s.data())
|
||||
return *this;
|
||||
return assign_unchecked(s.data(), s.size());
|
||||
}
|
||||
@ -1499,7 +1621,7 @@ public:
|
||||
basic_static_string&
|
||||
assign(const T& t)
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return assign(sv.data(), sv.size());
|
||||
}
|
||||
|
||||
@ -1551,8 +1673,12 @@ public:
|
||||
size_type pos,
|
||||
size_type count = npos)
|
||||
{
|
||||
const auto sv = string_view_type(t).substr(pos, count);
|
||||
return assign(sv.data(), sv.size());
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
if( pos > sv.size() )
|
||||
detail::throw_exception<std::out_of_range>(
|
||||
"pos >= t.size()");
|
||||
std::size_t rlen = (std::min)( count, sv.size() - pos );
|
||||
return assign(sv.data() + pos, rlen);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
@ -1798,6 +1924,7 @@ public:
|
||||
return data();
|
||||
}
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
/** Convert to a string view referring to the string.
|
||||
|
||||
Returns a string view referring to the
|
||||
@ -1812,6 +1939,28 @@ public:
|
||||
{
|
||||
return string_view_type(data(), size());
|
||||
}
|
||||
#else
|
||||
#ifdef BOOST_STATIC_STRING_HAS_STD_STRING_VIEW
|
||||
BOOST_STATIC_STRING_CPP11_CONSTEXPR
|
||||
operator std::basic_string_view<CharT, Traits>() const noexcept
|
||||
{
|
||||
return std::basic_string_view<CharT, Traits>(data(), size());
|
||||
}
|
||||
#endif
|
||||
#ifndef BOOST_STATIC_STRING_STANDALONE
|
||||
BOOST_STATIC_STRING_CPP11_CONSTEXPR
|
||||
operator ::boost::basic_string_view<CharT, Traits>() const noexcept
|
||||
{
|
||||
return ::boost::basic_string_view<CharT, Traits>(data(), size());
|
||||
}
|
||||
|
||||
BOOST_STATIC_STRING_CPP11_CONSTEXPR
|
||||
operator ::boost::core::basic_string_view<CharT>() const noexcept
|
||||
{
|
||||
return ::boost::core::basic_string_view<CharT>(data(), size());
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
//
|
||||
@ -2464,7 +2613,7 @@ public:
|
||||
size_type index,
|
||||
const T& t)
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return insert(index, sv.data(), sv.size());
|
||||
}
|
||||
|
||||
@ -2513,8 +2662,10 @@ public:
|
||||
size_type index_str,
|
||||
size_type count = npos)
|
||||
{
|
||||
const auto sv = string_view_type(t).substr(index_str, count);
|
||||
return insert(index, sv.data(), sv.size());
|
||||
detail::common_string_view_type<T, CharT, Traits> sv(t);
|
||||
if ( index_str > sv.size() )
|
||||
detail::throw_exception<std::out_of_range>("index_str > t.size()");
|
||||
return insert(index, sv.data() + index_str, (std::min)(sv.size() - index_str, count));
|
||||
}
|
||||
|
||||
/** Erase from the string.
|
||||
@ -2873,7 +3024,7 @@ public:
|
||||
basic_static_string&
|
||||
append(const T& t)
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return append(sv.data(), sv.size());
|
||||
}
|
||||
|
||||
@ -2918,8 +3069,10 @@ public:
|
||||
size_type pos,
|
||||
size_type count = npos)
|
||||
{
|
||||
const auto sv = string_view_type(t).substr(pos, count);
|
||||
return append(sv.data(), sv.size());
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
if ( pos > sv.size() )
|
||||
detail::throw_exception<std::out_of_range>("pos > t.size()");
|
||||
return append(sv.data() + pos, (std::min)(sv.size() - pos, count));
|
||||
}
|
||||
|
||||
/** Append to the string.
|
||||
@ -3303,7 +3456,7 @@ public:
|
||||
int
|
||||
compare(const T& t) const noexcept
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
data(), size(), sv.data(), sv.size());
|
||||
}
|
||||
@ -3354,7 +3507,7 @@ public:
|
||||
size_type count1,
|
||||
const T& t) const
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
data() + pos1, capped_length(pos1, count1), sv.data(), sv.size());
|
||||
}
|
||||
@ -3411,9 +3564,12 @@ public:
|
||||
size_type pos2,
|
||||
size_type count2 = npos) const
|
||||
{
|
||||
const auto sv = string_view_type(t).substr(pos2, count2);
|
||||
return compare(pos1, count1,
|
||||
sv.data(), sv.size());
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
if ( pos2 > sv.size())
|
||||
detail::throw_exception<std::out_of_range>("pos2 > sv.size()");
|
||||
return compare(
|
||||
pos1, count1, sv.data() + pos2,
|
||||
(std::min)(sv.size() - pos2, count2));
|
||||
}
|
||||
|
||||
/** Return a substring.
|
||||
@ -3446,6 +3602,7 @@ public:
|
||||
data() + pos, capped_length(pos, count));
|
||||
}
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
/** Return a string view of a substring.
|
||||
|
||||
Returns a view of a substring.
|
||||
@ -3473,6 +3630,7 @@ public:
|
||||
return string_view_type(
|
||||
data() + pos, capped_length(pos, count));
|
||||
}
|
||||
#endif
|
||||
|
||||
/** Copy a substring to another string.
|
||||
|
||||
@ -3732,7 +3890,7 @@ public:
|
||||
size_type n1,
|
||||
const T& t)
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return replace(pos1, n1, sv.data(), sv.size());
|
||||
}
|
||||
|
||||
@ -3784,8 +3942,12 @@ public:
|
||||
size_type pos2,
|
||||
size_type n2 = npos)
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
return replace(pos1, n1, sv.substr(pos2, n2));
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
if ( pos2 > sv.size())
|
||||
detail::throw_exception<std::out_of_range>("pos2 > t.size()");
|
||||
return replace(
|
||||
pos1, n1, sv.data() + pos2,
|
||||
(std::min)(sv.size() - pos2, n2));
|
||||
}
|
||||
|
||||
/** Replace a part of the string.
|
||||
@ -3990,8 +4152,8 @@ public:
|
||||
const_iterator i2,
|
||||
const T& t)
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
return replace(i1, i2, sv.begin(), sv.end());
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return replace(i1, i2, sv.data(), sv.data() + sv.size());
|
||||
}
|
||||
|
||||
/** Replace a part of the string.
|
||||
@ -4251,9 +4413,13 @@ public:
|
||||
find(
|
||||
const T& t,
|
||||
size_type pos = 0) const
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
noexcept(detail::is_nothrow_convertible<const T&, string_view_type>::value)
|
||||
#else
|
||||
noexcept(detail::is_nothrow_convertible<const T&, detail::common_string_view_type<T, CharT, Traits>>::value)
|
||||
#endif
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return find(sv.data(), pos, sv.size());
|
||||
}
|
||||
|
||||
@ -4404,9 +4570,13 @@ public:
|
||||
rfind(
|
||||
const T& t,
|
||||
size_type pos = npos) const
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
noexcept(detail::is_nothrow_convertible<const T&, string_view_type>::value)
|
||||
#else
|
||||
noexcept(detail::is_nothrow_convertible<const T&, detail::common_string_view_type<T, CharT, Traits>>::value)
|
||||
#endif
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return rfind(sv.data(), pos, sv.size());
|
||||
}
|
||||
|
||||
@ -4552,9 +4722,13 @@ public:
|
||||
find_first_of(
|
||||
const T& t,
|
||||
size_type pos = 0) const
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
noexcept(detail::is_nothrow_convertible<const T&, string_view_type>::value)
|
||||
#else
|
||||
noexcept(detail::is_nothrow_convertible<const T&, detail::common_string_view_type<T, CharT, Traits>>::value)
|
||||
#endif
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return find_first_of(sv.data(), pos, sv.size());
|
||||
}
|
||||
|
||||
@ -4695,9 +4869,13 @@ public:
|
||||
find_last_of(
|
||||
const T& t,
|
||||
size_type pos = npos) const
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
noexcept(detail::is_nothrow_convertible<const T&, string_view_type>::value)
|
||||
#else
|
||||
noexcept(detail::is_nothrow_convertible<const T&, detail::common_string_view_type<T, CharT, Traits>>::value)
|
||||
#endif
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return find_last_of(sv.data(), pos, sv.size());
|
||||
}
|
||||
|
||||
@ -4837,9 +5015,13 @@ public:
|
||||
find_first_not_of(
|
||||
const T& t,
|
||||
size_type pos = 0) const
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
noexcept(detail::is_nothrow_convertible<const T&, string_view_type>::value)
|
||||
#else
|
||||
noexcept(detail::is_nothrow_convertible<const T&, detail::common_string_view_type<T, CharT, Traits>>::value)
|
||||
#endif
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return find_first_not_of(sv.data(), pos, sv.size());
|
||||
}
|
||||
|
||||
@ -4978,9 +5160,13 @@ public:
|
||||
find_last_not_of(
|
||||
const T& t,
|
||||
size_type pos = npos) const
|
||||
#ifdef BOOST_STATIC_STRING_DOCS
|
||||
noexcept(detail::is_nothrow_convertible<const T&, string_view_type>::value)
|
||||
#else
|
||||
noexcept(detail::is_nothrow_convertible<const T&, detail::common_string_view_type<T, CharT, Traits>>::value)
|
||||
#endif
|
||||
{
|
||||
const string_view_type sv = t;
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
return find_last_not_of(sv.data(), pos, sv.size());
|
||||
}
|
||||
|
||||
@ -5094,15 +5280,21 @@ public:
|
||||
|
||||
Linear.
|
||||
|
||||
@param s The string view to check for.
|
||||
@param t The string view to check for.
|
||||
*/
|
||||
template<typename T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
bool
|
||||
starts_with(
|
||||
string_view_type s) const noexcept
|
||||
T const& t) const noexcept
|
||||
{
|
||||
const size_type len = s.size();
|
||||
return size() >= len && !traits_type::compare(data(), s.data(), len);
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
const size_type len = sv.size();
|
||||
return size() >= len && !traits_type::compare(data(), sv.data(), len);
|
||||
}
|
||||
|
||||
/** Return whether the string begins with a character.
|
||||
@ -5152,15 +5344,21 @@ public:
|
||||
|
||||
Linear.
|
||||
|
||||
@param s The string view to check for.
|
||||
@param t The string view to check for.
|
||||
*/
|
||||
template<typename T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
bool
|
||||
ends_with(
|
||||
string_view_type s) const noexcept
|
||||
T const& t) const noexcept
|
||||
{
|
||||
const size_type len = s.size();
|
||||
return size() >= len && !traits_type::compare(data() + (size() - len), s.data(), len);
|
||||
detail::common_string_view_type<T, CharT, Traits> sv = t;
|
||||
const size_type len = sv.size();
|
||||
return size() >= len && !traits_type::compare(data() + (size() - len), sv.data(), len);
|
||||
}
|
||||
|
||||
/** Return whether the string ends with a character.
|
||||
@ -5417,6 +5615,42 @@ operator==(
|
||||
rhs, Traits::length(rhs)) == 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator==(
|
||||
const T& lhs,
|
||||
const basic_static_string<N, CharT, Traits>& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> lhsv = lhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhsv.data(), lhsv.size(),
|
||||
rhs.data(), rhs.size()) == 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator==(
|
||||
const basic_static_string<N, CharT, Traits>& lhs,
|
||||
const T& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> rhsv = rhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhs.data(), lhs.size(),
|
||||
rhsv.data(), rhsv.size()) == 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
@ -5443,6 +5677,42 @@ operator!=(
|
||||
rhs, Traits::length(rhs)) != 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator!=(
|
||||
const T& lhs,
|
||||
const basic_static_string<N, CharT, Traits>& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> lhsv = lhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhsv.data(), lhsv.size(),
|
||||
rhs.data(), rhs.size()) != 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator!=(
|
||||
const basic_static_string<N, CharT, Traits>& lhs,
|
||||
const T& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> rhsv = rhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhs.data(), lhs.size(),
|
||||
rhsv.data(), rhsv.size()) != 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
@ -5469,6 +5739,42 @@ operator<(
|
||||
rhs, Traits::length(rhs)) < 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator<(
|
||||
const T& lhs,
|
||||
const basic_static_string<N, CharT, Traits>& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> lhsv = lhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhsv.data(), lhsv.size(),
|
||||
rhs.data(), rhs.size()) < 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator<(
|
||||
const basic_static_string<N, CharT, Traits>& lhs,
|
||||
const T& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> rhsv = rhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhs.data(), lhs.size(),
|
||||
rhsv.data(), rhsv.size()) < 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
@ -5495,6 +5801,42 @@ operator<=(
|
||||
rhs, Traits::length(rhs)) <= 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator<=(
|
||||
const T& lhs,
|
||||
const basic_static_string<N, CharT, Traits>& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> lhsv = lhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhsv.data(), lhsv.size(),
|
||||
rhs.data(), rhs.size()) <= 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator<=(
|
||||
const basic_static_string<N, CharT, Traits>& lhs,
|
||||
const T& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> rhsv = rhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhs.data(), lhs.size(),
|
||||
rhsv.data(), rhsv.size()) <= 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
@ -5521,6 +5863,43 @@ operator>(
|
||||
rhs, Traits::length(rhs)) > 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator>(
|
||||
const T& lhs,
|
||||
const basic_static_string<N, CharT, Traits>& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> lhsv = lhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhsv.data(), lhsv.size(),
|
||||
rhs.data(), rhs.size()) > 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator>(
|
||||
const basic_static_string<N, CharT, Traits>& lhs,
|
||||
const T& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> rhsv = rhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhs.data(), lhs.size(),
|
||||
rhsv.data(), rhsv.size()) > 0;
|
||||
}
|
||||
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
@ -5547,6 +5926,42 @@ operator>=(
|
||||
rhs, Traits::length(rhs)) >= 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator>=(
|
||||
const T& lhs,
|
||||
const basic_static_string<N, CharT, Traits>& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> lhsv = lhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhsv.data(), lhsv.size(),
|
||||
rhs.data(), rhs.size()) >= 0;
|
||||
}
|
||||
|
||||
template<std::size_t N, typename CharT, typename Traits, class T
|
||||
#ifndef BOOST_STATIC_STRING_DOCS
|
||||
, typename = detail::enable_if_viewable_t<T, CharT, Traits>
|
||||
#endif
|
||||
>
|
||||
BOOST_STATIC_STRING_CPP14_CONSTEXPR
|
||||
inline
|
||||
bool
|
||||
operator>=(
|
||||
const basic_static_string<N, CharT, Traits>& lhs,
|
||||
const T& rhs)
|
||||
{
|
||||
detail::common_string_view_type<T, CharT, Traits> rhsv = rhs;
|
||||
return detail::lexicographical_compare<CharT, Traits>(
|
||||
lhs.data(), lhs.size(),
|
||||
rhsv.data(), rhsv.size()) >= 0;
|
||||
}
|
||||
|
||||
template<
|
||||
std::size_t N, std::size_t M,
|
||||
typename CharT, typename Traits>
|
||||
@ -5682,7 +6097,13 @@ operator<<(
|
||||
std::basic_ostream<CharT, Traits>& os,
|
||||
const basic_static_string<N, CharT, Traits>& s)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
return os << basic_string_view<CharT, Traits>(s.data(), s.size());
|
||||
#else
|
||||
for (auto c: s)
|
||||
os << c;
|
||||
return os;
|
||||
#endif
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
@ -5922,14 +6343,47 @@ struct hash<
|
||||
operator()(
|
||||
const boost::static_strings::basic_static_string<N, CharT, Traits>& str) const noexcept
|
||||
{
|
||||
#ifndef BOOST_STATIC_STRING_STANDALONE
|
||||
#if !defined(BOOST_STATIC_STRING_STANDALONE)
|
||||
return boost::hash_range(str.begin(), str.end());
|
||||
#else
|
||||
#elif defined(BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW)
|
||||
using view_type = typename
|
||||
boost::static_strings::basic_string_view<CharT, Traits>;
|
||||
return std::hash<view_type>()(view_type(str.data(), str.size()));
|
||||
#else
|
||||
std::size_t seed = 0;
|
||||
for (CharT const& c : str) {
|
||||
mix_impl(std::integral_constant<bool, sizeof(std::size_t) >= 8>{}, seed, c);
|
||||
}
|
||||
return seed;
|
||||
#endif
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
mix_impl(std::true_type, std::size_t& seed, CharT c)
|
||||
{
|
||||
seed += 0x9e3779b9 + std::hash<CharT>()( c );
|
||||
std::size_t const m = (std::size_t(0xe9846af) << 32) + 0x9b1a615d;
|
||||
seed ^= seed >> 32;
|
||||
seed *= m;
|
||||
seed ^= seed >> 32;
|
||||
seed *= m;
|
||||
seed ^= seed >> 28;
|
||||
}
|
||||
|
||||
static
|
||||
void
|
||||
mix_impl(std::false_type, std::size_t& seed, CharT c)
|
||||
{
|
||||
seed += 0x9e3779b9 + std::hash<CharT>()( c );
|
||||
std::size_t const m1 = 0x21f0aaad;
|
||||
std::size_t const m2 = 0x735a2d97;
|
||||
seed ^= seed >> 16;
|
||||
seed *= m1;
|
||||
seed ^= seed >> 15;
|
||||
seed *= m2;
|
||||
seed ^= seed >> 15;
|
||||
}
|
||||
};
|
||||
} // std
|
||||
|
||||
@ -6039,33 +6493,40 @@ insert(
|
||||
detail::is_forward_iterator<
|
||||
ForwardIterator>::value, iterator>::type
|
||||
{
|
||||
// input
|
||||
const std::size_t count = detail::distance(first, last);
|
||||
const auto first_addr = &*first;
|
||||
const auto last_addr = first_addr + count;
|
||||
|
||||
// output
|
||||
const auto curr_size = size();
|
||||
const auto curr_data = data();
|
||||
const std::size_t count = detail::distance(first, last);
|
||||
const std::size_t index = pos - curr_data;
|
||||
const auto first_addr = &*first;
|
||||
auto dest = &curr_data[index];
|
||||
|
||||
if (count > max_size() - curr_size)
|
||||
detail::throw_exception<std::length_error>(
|
||||
"count > max_size() - curr_size");
|
||||
|
||||
traits_type::move(dest + count, dest, curr_size - index + 1);
|
||||
const bool inside = detail::ptr_in_range(curr_data, curr_data + curr_size, first_addr);
|
||||
if (!inside || (inside && (first_addr + count <= pos)))
|
||||
if (!inside || last_addr <= pos)
|
||||
{
|
||||
traits_type::move(&curr_data[index + count], &curr_data[index], curr_size - index + 1);
|
||||
detail::copy_with_traits<Traits>(first, last, &curr_data[index]);
|
||||
detail::copy_with_traits<Traits>(first, last, dest);
|
||||
}
|
||||
else
|
||||
else /* if (inside) */
|
||||
{
|
||||
const size_type offset = first_addr - curr_data;
|
||||
traits_type::move(&curr_data[index + count], &curr_data[index], curr_size - index + 1);
|
||||
if (offset < index)
|
||||
{
|
||||
const size_type diff = index - offset;
|
||||
traits_type::copy(&curr_data[index], &curr_data[offset], diff);
|
||||
traits_type::copy(&curr_data[index + diff], &curr_data[index + count], count - diff);
|
||||
traits_type::copy(dest, &curr_data[offset], diff);
|
||||
traits_type::copy(&curr_data[index + diff], dest + count, count - diff);
|
||||
}
|
||||
else
|
||||
{
|
||||
traits_type::copy(&curr_data[index], &curr_data[offset + count], count);
|
||||
auto src = &curr_data[offset + count];
|
||||
traits_type::copy(dest, src, count);
|
||||
}
|
||||
}
|
||||
this->set_size(curr_size + count);
|
||||
@ -6525,7 +6986,18 @@ insert_unchecked(
|
||||
this->set_size(curr_size + count);
|
||||
return curr_data + index;
|
||||
}
|
||||
|
||||
} // static_strings
|
||||
} // boost
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 7
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@ -11,7 +11,7 @@
|
||||
"String"
|
||||
],
|
||||
"maintainers": [
|
||||
"Krystian Stasiowski <sdkrystian@gmail.com>",
|
||||
"Alan de Freitas <alandefreitas@gmail.com>",
|
||||
"Vinnie Falco <vinnie.falco@gmail.com>"
|
||||
],
|
||||
"cxxstd": "11"
|
||||
|
@ -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,19 @@
|
||||
# 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)
|
||||
add_test(NAME boost_static_string_tests COMMAND boost_static_string_tests)
|
||||
|
@ -357,8 +357,10 @@ testConstantEvaluation()
|
||||
a.substr(0);
|
||||
#endif
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_HAS_STRING_VIEW
|
||||
// subview
|
||||
a.subview(0);
|
||||
#endif
|
||||
|
||||
// copy
|
||||
char k[20]{};
|
||||
|
@ -9,11 +9,12 @@
|
||||
//
|
||||
|
||||
// Test that header file is self-contained.
|
||||
#include <boost/static_string/static_string.hpp>
|
||||
#include <boost/static_string.hpp>
|
||||
#include "constexpr_tests.hpp"
|
||||
#include "compile_fail.hpp"
|
||||
|
||||
#include <boost/core/lightweight_test.hpp>
|
||||
#include <boost/core/ignore_unused.hpp>
|
||||
#include <cstdlib>
|
||||
#include <cwchar>
|
||||
#include <cctype>
|
||||
@ -25,7 +26,15 @@ namespace static_strings {
|
||||
|
||||
template class basic_static_string<420, char>;
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
using string_view = basic_string_view<char, std::char_traits<char>>;
|
||||
#endif
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
using string_like = basic_string_view<char, std::char_traits<char>>;
|
||||
#else
|
||||
using string_like = std::string;
|
||||
#endif
|
||||
|
||||
template <class S>
|
||||
bool
|
||||
@ -50,13 +59,21 @@ testSV(const S& s, typename S::size_type pos, typename S::size_type n)
|
||||
{
|
||||
if (pos <= s.size())
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
typename S::string_view_type str = s.subview(pos, n);
|
||||
#else
|
||||
auto str = s.substr(pos, n);
|
||||
#endif
|
||||
typename S::size_type rlen = (std::min)(n, s.size() - pos);
|
||||
return (S::traits_type::compare(s.data() + pos, str.data(), rlen) == 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
BOOST_TEST_THROWS((s.subview(pos, n)), std::out_of_range);
|
||||
#else
|
||||
BOOST_TEST_THROWS((s.substr(pos, n)), std::out_of_range);
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -341,11 +358,11 @@ testConstruct()
|
||||
}
|
||||
{
|
||||
static_string<3> s1(
|
||||
string_view("123"));
|
||||
string_like("123"));
|
||||
BOOST_TEST(s1 == "123");
|
||||
BOOST_TEST(*s1.end() == 0);
|
||||
BOOST_TEST_THROWS(
|
||||
(static_string<2>(string_view("123"))),
|
||||
(static_string<2>(string_like("123"))),
|
||||
std::length_error);
|
||||
}
|
||||
{
|
||||
@ -412,6 +429,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<CharT> ilist)
|
||||
@ -422,6 +440,7 @@ testAssignment()
|
||||
|
||||
// assign(T const& t)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
struct T
|
||||
{
|
||||
operator string_view() const noexcept
|
||||
@ -429,6 +448,21 @@ testAssignment()
|
||||
return "abc";
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct T
|
||||
{
|
||||
char const* data() const noexcept
|
||||
{
|
||||
static char p[] = "abc";
|
||||
return p;
|
||||
}
|
||||
|
||||
std::size_t size() const noexcept
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
BOOST_TEST(static_string<3>{}.assign(T{}) == "abc");
|
||||
BOOST_TEST(static_string<3>{"*"}.assign(T{}) == "abc");
|
||||
BOOST_TEST(static_string<3>{"***"}.assign(T{}) == "abc");
|
||||
@ -437,6 +471,7 @@ testAssignment()
|
||||
|
||||
// assign(T const& t, size_type pos, size_type count = npos)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
struct T
|
||||
{
|
||||
operator string_view() const noexcept
|
||||
@ -444,6 +479,23 @@ testAssignment()
|
||||
return "abcde";
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct T
|
||||
{
|
||||
char const*
|
||||
data() const noexcept
|
||||
{
|
||||
static char p[] = "abcde";
|
||||
return p;
|
||||
}
|
||||
|
||||
std::size_t
|
||||
size() const
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
BOOST_TEST(static_string<5>{}.assign(T{}, 0) == "abcde");
|
||||
BOOST_TEST(static_string<5>{}.assign(T{}, 0, 5) == "abcde");
|
||||
BOOST_TEST(static_string<5>{}.assign(T{}, 1, 3) == "bcd");
|
||||
@ -505,15 +557,14 @@ testAssignment()
|
||||
}
|
||||
{
|
||||
static_string<3> s1;
|
||||
s1 = string_view("123");
|
||||
s1 = string_like("123");
|
||||
BOOST_TEST(s1 == "123");
|
||||
BOOST_TEST(*s1.end() == 0);
|
||||
static_string<1> s2;
|
||||
BOOST_TEST_THROWS(
|
||||
s2 = string_view("123"),
|
||||
s2 = string_like("123"),
|
||||
std::length_error);
|
||||
}
|
||||
|
||||
{
|
||||
static_string<4> s1;
|
||||
s1.assign(3, 'x');
|
||||
@ -601,14 +652,14 @@ testAssignment()
|
||||
}
|
||||
{
|
||||
static_string<5> s1;
|
||||
s1.assign(string_view("123"));
|
||||
s1.assign(string_like("123"));
|
||||
BOOST_TEST(s1 == "123");
|
||||
BOOST_TEST(*s1.end() == 0);
|
||||
s1.assign(string_view("12345"));
|
||||
s1.assign(string_like("12345"));
|
||||
BOOST_TEST(s1 == "12345");
|
||||
BOOST_TEST(*s1.end() == 0);
|
||||
BOOST_TEST_THROWS(
|
||||
s1.assign(string_view("1234567")),
|
||||
s1.assign(string_like("1234567")),
|
||||
std::length_error);
|
||||
}
|
||||
{
|
||||
@ -672,6 +723,13 @@ testAssignment()
|
||||
|
||||
s_long.assign(s_long.data() + 2, 8);
|
||||
BOOST_TEST(s_long == "rem ipsu");
|
||||
|
||||
// issue #41
|
||||
{
|
||||
boost::static_strings::static_string<0> a;
|
||||
auto b = a;
|
||||
BOOST_TEST(b == "");
|
||||
}
|
||||
}
|
||||
|
||||
// done
|
||||
@ -786,11 +844,20 @@ testElements()
|
||||
BOOST_TEST(std::memcmp(
|
||||
s.c_str(), "123\0", 4) == 0);
|
||||
}
|
||||
#ifdef BOOST_STATIC_ASSERT_HAS_STRING_VIEW
|
||||
{
|
||||
static_string<3> s("123");
|
||||
string_view sv = s;
|
||||
BOOST_TEST(static_string<5>(sv) == "123");
|
||||
}
|
||||
#endif
|
||||
#ifdef BOOST_STATIC_ASSERT_HAS_STD_STRING_VIEW
|
||||
{
|
||||
static_string<3> s("123");
|
||||
std::string_view sv = s;
|
||||
BOOST_TEST(static_string<5>(sv) == "123");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// done
|
||||
@ -897,12 +964,17 @@ testClear()
|
||||
BOOST_TEST(*s.end() == 0);
|
||||
}
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push // false positives
|
||||
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
||||
#endif
|
||||
|
||||
// done
|
||||
static
|
||||
void
|
||||
testInsert()
|
||||
{
|
||||
using sv = string_view;
|
||||
using sv = string_like;
|
||||
using S = static_string<100>;
|
||||
|
||||
// insert(size_type index, size_type count, CharT ch)
|
||||
@ -983,6 +1055,7 @@ testInsert()
|
||||
|
||||
// insert(size_type index, T const& t)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
struct T
|
||||
{
|
||||
operator string_view() const noexcept
|
||||
@ -990,6 +1063,23 @@ testInsert()
|
||||
return "b";
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct T
|
||||
{
|
||||
char const*
|
||||
data() const noexcept
|
||||
{
|
||||
static char p[] = "b";
|
||||
return p;
|
||||
}
|
||||
|
||||
std::size_t
|
||||
size() const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
BOOST_TEST(static_string<3>{"ac"}.insert(1, T{}) == "abc");
|
||||
BOOST_TEST_THROWS(static_string<4>{"abc"}.insert(4, T{}), std::out_of_range);
|
||||
BOOST_TEST_THROWS(static_string<3>{"abc"}.insert(1, T{}), std::length_error);
|
||||
@ -997,6 +1087,7 @@ testInsert()
|
||||
|
||||
// insert(size_type index, T const& t, size_type index_str, size_type count = npos)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
struct T
|
||||
{
|
||||
operator string_view() const noexcept
|
||||
@ -1004,6 +1095,23 @@ testInsert()
|
||||
return "abcd";
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct T
|
||||
{
|
||||
char const*
|
||||
data() const noexcept
|
||||
{
|
||||
static char p[] = "abcd";
|
||||
return p;
|
||||
}
|
||||
|
||||
std::size_t
|
||||
size() const noexcept
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
BOOST_TEST(static_string<6>{"ae"}.insert(1, T{}, 1) == "abcde");
|
||||
BOOST_TEST(static_string<6>{"abe"}.insert(2, T{}, 2) == "abcde");
|
||||
BOOST_TEST(static_string<4>{"ac"}.insert(1, T{}, 1, 1) == "abc");
|
||||
@ -1050,6 +1158,7 @@ testInsert()
|
||||
BOOST_TEST_THROWS(
|
||||
(s2.insert(6, "__")),
|
||||
std::out_of_range);
|
||||
ignore_unused(s3);
|
||||
}
|
||||
{
|
||||
static_string<7> s1("12345");
|
||||
@ -1130,16 +1239,16 @@ testInsert()
|
||||
}
|
||||
{
|
||||
static_string<5> s1("123");
|
||||
s1.insert(1, string_view("UV"));
|
||||
s1.insert(1, string_like("UV"));
|
||||
BOOST_TEST(s1 == "1UV23");
|
||||
BOOST_TEST(*s1.end() == 0);
|
||||
static_string<4> s2("123");
|
||||
BOOST_TEST_THROWS(
|
||||
(s2.insert(1, string_view("UV"))),
|
||||
(s2.insert(1, string_like("UV"))),
|
||||
std::length_error);
|
||||
static_string<5> s3("123");
|
||||
BOOST_TEST_THROWS(
|
||||
(s3.insert(5, string_view("UV"))),
|
||||
(s3.insert(5, string_like("UV"))),
|
||||
std::out_of_range);
|
||||
}
|
||||
{
|
||||
@ -1639,6 +1748,10 @@ testInsert()
|
||||
BOOST_TEST(testI(S("abcdefghijklmnopqrst"), 21, "12345678901234567890", 20, S("can't happen")));
|
||||
}
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
// done
|
||||
static
|
||||
void
|
||||
@ -1967,7 +2080,7 @@ void
|
||||
testAppend()
|
||||
{
|
||||
using S = static_string<400>;
|
||||
using sv = string_view;
|
||||
using sv = string_like;
|
||||
|
||||
// append(size_type count, CharT ch)
|
||||
BOOST_TEST(static_string<1>{}.append(1, 'a') == "a");
|
||||
@ -2003,6 +2116,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<CharT> ilist)
|
||||
@ -2011,6 +2125,7 @@ testAppend()
|
||||
|
||||
// append(T const& t)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
struct T
|
||||
{
|
||||
operator string_view() const noexcept
|
||||
@ -2018,12 +2133,29 @@ testAppend()
|
||||
return "c";
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct T
|
||||
{
|
||||
char const*
|
||||
data() const noexcept
|
||||
{
|
||||
return "c";
|
||||
}
|
||||
|
||||
std::size_t
|
||||
size() const noexcept
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
BOOST_TEST(static_string<3>{"ab"}.append(T{}) == "abc");
|
||||
BOOST_TEST_THROWS(static_string<3>{"abc"}.append(T{}), std::length_error);
|
||||
}
|
||||
|
||||
// append(T const& t, size_type pos, size_type count = npos)
|
||||
{
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
struct T
|
||||
{
|
||||
operator string_view() const noexcept
|
||||
@ -2031,6 +2163,22 @@ testAppend()
|
||||
return "abcd";
|
||||
}
|
||||
};
|
||||
#else
|
||||
struct T
|
||||
{
|
||||
char const*
|
||||
data() const noexcept
|
||||
{
|
||||
return "abcd";
|
||||
}
|
||||
|
||||
std::size_t
|
||||
size() const noexcept
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
BOOST_TEST(static_string<4>{"ab"}.append(T{}, 2) == "abcd");
|
||||
BOOST_TEST(static_string<3>{"a"}.append(T{}, 1, 2) == "abc");
|
||||
BOOST_TEST_THROWS(static_string<4>{"abc"}.append(T{}, 5), std::out_of_range);
|
||||
@ -2121,7 +2269,7 @@ testAppend()
|
||||
std::length_error);
|
||||
}
|
||||
{
|
||||
string_view s1("XYZ");
|
||||
string_like s1("XYZ");
|
||||
static_string<5> s2("12");
|
||||
s2.append(s1);
|
||||
BOOST_TEST(s2 == "12XYZ");
|
||||
@ -2176,7 +2324,7 @@ static
|
||||
void
|
||||
testPlusEquals()
|
||||
{
|
||||
using sv = string_view;
|
||||
using sv = string_like;
|
||||
|
||||
// operator+=(CharT ch)
|
||||
BOOST_TEST((static_string<3>{"ab"} += 'c') == "abc");
|
||||
@ -2232,7 +2380,7 @@ testPlusEquals()
|
||||
std::length_error);
|
||||
}
|
||||
{
|
||||
string_view s1("34");
|
||||
string_like s1("34");
|
||||
static_string<4> s2("12");
|
||||
s2 += s1;
|
||||
BOOST_TEST(s2 == "1234");
|
||||
@ -2268,6 +2416,7 @@ testCompare()
|
||||
BOOST_TEST(s1.compare(0, 2, s2.data()) < 0);
|
||||
BOOST_TEST(s2.compare(0, 1, s1.data()) > 0);
|
||||
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
BOOST_TEST(s1.compare(s2.subview()) < 0);
|
||||
BOOST_TEST(s2.compare(s1.subview()) > 0);
|
||||
|
||||
@ -2276,6 +2425,7 @@ testCompare()
|
||||
|
||||
BOOST_TEST(s1.compare(0, 2, s2.subview(), 0, 1) < 0);
|
||||
BOOST_TEST(s2.compare(0, 1, s1.subview(), 0, 2) > 0);
|
||||
#endif
|
||||
|
||||
BOOST_TEST(s1 < "10");
|
||||
BOOST_TEST(s2 > "1");
|
||||
@ -2284,6 +2434,14 @@ testCompare()
|
||||
BOOST_TEST(s1 < "20");
|
||||
BOOST_TEST(s2 > "1");
|
||||
BOOST_TEST(s2 > "2");
|
||||
|
||||
BOOST_TEST(s1 < string_like("10"));
|
||||
BOOST_TEST(s2 > string_like("1"));
|
||||
BOOST_TEST(string_like("10") > s1);
|
||||
BOOST_TEST(string_like("1") < s2);
|
||||
BOOST_TEST(s1 < string_like("20"));
|
||||
BOOST_TEST(s2 > string_like("1"));
|
||||
BOOST_TEST(s2 > string_like("2"));
|
||||
}
|
||||
{
|
||||
str2 s1("x");
|
||||
@ -2319,6 +2477,19 @@ testCompare()
|
||||
BOOST_TEST(! ("x" < s));
|
||||
BOOST_TEST(! ("x" > s));
|
||||
BOOST_TEST(! ("x" != s));
|
||||
|
||||
BOOST_TEST(s == string_like("x"));
|
||||
BOOST_TEST(s <= string_like("x"));
|
||||
BOOST_TEST(s >= string_like("x"));
|
||||
BOOST_TEST(! (s < string_like("x")));
|
||||
BOOST_TEST(! (s > string_like("x")));
|
||||
BOOST_TEST(! (s != string_like("x")));
|
||||
BOOST_TEST(string_like("x") == s);
|
||||
BOOST_TEST(string_like("x") <= s);
|
||||
BOOST_TEST(string_like("x") >= s);
|
||||
BOOST_TEST(! (string_like("x") < s));
|
||||
BOOST_TEST(! (string_like("x") > s));
|
||||
BOOST_TEST(! (string_like("x") != s));
|
||||
}
|
||||
{
|
||||
str2 s("x");
|
||||
@ -2334,6 +2505,19 @@ testCompare()
|
||||
BOOST_TEST(! ("y" == s));
|
||||
BOOST_TEST(! ("y" <= s));
|
||||
BOOST_TEST(! ("y" < s));
|
||||
|
||||
BOOST_TEST(s <= string_like("y"));
|
||||
BOOST_TEST(s < string_like("y"));
|
||||
BOOST_TEST(s != string_like("y"));
|
||||
BOOST_TEST(! (s == string_like("y")));
|
||||
BOOST_TEST(! (s >= string_like("y")));
|
||||
BOOST_TEST(! (s > "x"));
|
||||
BOOST_TEST(string_like("y") >= s);
|
||||
BOOST_TEST(string_like("y") > s);
|
||||
BOOST_TEST(string_like("y") != s);
|
||||
BOOST_TEST(! (string_like("y") == s));
|
||||
BOOST_TEST(! (string_like("y") <= s));
|
||||
BOOST_TEST(! (string_like("y") < s));
|
||||
}
|
||||
{
|
||||
str1 s1("x");
|
||||
@ -3795,8 +3979,8 @@ testFind()
|
||||
{
|
||||
const char* cs1 = "12345";
|
||||
const char* cs2 = "2345";
|
||||
string_view v1 = cs1;
|
||||
string_view v2 = cs2;
|
||||
string_like v1 = cs1;
|
||||
string_like v2 = cs2;
|
||||
static_string<5> fs1 = cs1;
|
||||
static_string<4> fs2 = cs2;
|
||||
using S = static_string<400>;
|
||||
@ -5119,8 +5303,8 @@ testFind()
|
||||
|
||||
const char* cs3 = "12456";
|
||||
const char* cs4 = "2356";
|
||||
string_view v3 = cs3;
|
||||
string_view v4 = cs4;
|
||||
string_like v3 = cs3;
|
||||
string_like v4 = cs4;
|
||||
static_string<5> fs3 = cs3;
|
||||
static_string<4> fs4 = cs4;
|
||||
|
||||
@ -5814,6 +5998,11 @@ testFind()
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic push // false positives
|
||||
#pragma GCC diagnostic ignored "-Wstringop-overflow"
|
||||
#endif
|
||||
|
||||
// done
|
||||
void
|
||||
testReplace()
|
||||
@ -5900,12 +6089,12 @@ testReplace()
|
||||
// replace(size_type pos1, size_type n1, const T& t);
|
||||
{
|
||||
static_string<20> fs1 = "helloworld";
|
||||
BOOST_TEST(fs1.replace(0, fs1.size(), string_view(fs1)) == "helloworld");
|
||||
BOOST_TEST(fs1.replace(0, fs1.size(), string_like(fs1.data(), fs1.size())) == "helloworld");
|
||||
}
|
||||
// replace(size_type pos1, size_type n1, const T& t, size_type pos2, size_type n2 = npos);
|
||||
{
|
||||
static_string<20> fs1 = "helloworld";
|
||||
BOOST_TEST(fs1.replace(0, fs1.size(), string_view(fs1), 0, fs1.size()) == "helloworld");
|
||||
BOOST_TEST(fs1.replace(0, fs1.size(), string_like(fs1.data(), fs1.size()), 0, fs1.size()) == "helloworld");
|
||||
}
|
||||
// replace(size_type pos, size_type n, const charT * s);
|
||||
{
|
||||
@ -5931,7 +6120,7 @@ testReplace()
|
||||
// replace(const_iterator i1, const_iterator i2, const T& t);
|
||||
{
|
||||
static_string<20> fs1 = "helloworld";
|
||||
BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), string_view(fs1)) == "helloworld");
|
||||
BOOST_TEST(fs1.replace(fs1.begin(), fs1.end(), string_like(fs1.data(), fs1.size())) == "helloworld");
|
||||
}
|
||||
// replace(const_iterator i1, const_iterator i2, const charT* s, size_type n);
|
||||
{
|
||||
@ -6818,6 +7007,10 @@ testReplace()
|
||||
BOOST_TEST_THROWS(T("aaaaa").replace(0, 1, S("bbbbbbbbbbbbb")), std::length_error);
|
||||
}
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 8
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
// done
|
||||
void
|
||||
testSubstr()
|
||||
@ -7074,21 +7267,21 @@ testStartsEnds()
|
||||
BOOST_TEST(S("1234567890").starts_with("1234567890"));
|
||||
BOOST_TEST(!S("1234567890").starts_with("234"));
|
||||
BOOST_TEST(!S("1234567890").starts_with("12345678900"));
|
||||
BOOST_TEST(S("1234567890").starts_with(string_view("1234567890")));
|
||||
BOOST_TEST(S("1234567890").starts_with(string_like("1234567890")));
|
||||
|
||||
BOOST_TEST(S("1234567890").ends_with('0'));
|
||||
BOOST_TEST(S("1234567890").ends_with("890"));
|
||||
BOOST_TEST(S("1234567890").ends_with("1234567890"));
|
||||
BOOST_TEST(!S("1234567890").ends_with("234"));
|
||||
BOOST_TEST(!S("1234567890").ends_with("12345678900"));
|
||||
BOOST_TEST(S("1234567890").ends_with(string_view("1234567890")));
|
||||
BOOST_TEST(S("1234567890").ends_with(string_like("1234567890")));
|
||||
|
||||
BOOST_TEST(!S().starts_with('0'));
|
||||
BOOST_TEST(!S().starts_with("0"));
|
||||
BOOST_TEST(!S().starts_with(string_view("0")));
|
||||
BOOST_TEST(!S().starts_with(string_like("0")));
|
||||
BOOST_TEST(!S().ends_with('0'));
|
||||
BOOST_TEST(!S().ends_with("0"));
|
||||
BOOST_TEST(!S().ends_with(string_view("0")));
|
||||
BOOST_TEST(!S().ends_with(string_like("0")));
|
||||
}
|
||||
|
||||
void
|
||||
@ -7129,7 +7322,9 @@ testStream()
|
||||
static_string<10> b = "abcdefghij";
|
||||
a << b;
|
||||
static_string<10> c(std::istream_iterator<char>{a}, std::istream_iterator<char>{});
|
||||
#ifdef BOOST_STATIC_STRING_HAS_ANY_STRING_VIEW
|
||||
BOOST_TEST(a.str() == b.subview());
|
||||
#endif
|
||||
BOOST_TEST(b == c);
|
||||
}
|
||||
|
||||
@ -7249,4 +7444,5 @@ int
|
||||
main()
|
||||
{
|
||||
return boost::static_strings::runTests();
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user