diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 000000000..2b943a44e --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,116 @@ +# Copyright 2016, 2017 Peter Dimov +# 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) + +# +# Generic Appveyor build script for boostorg repositories +# See: https://github.com/boostorg/boost-ci/ +# +# Instructions for customizing this script for your library: +# +# 1. Customize the compilers and language levels you want. +# 2. If you have more than include/, src/, test/, example/, examples/, +# benchmark/ or tools/ directories, set the environment variable DEPINST. +# For example if your build uses code in "bench/" and "fog/" directories: +# - DEPINST: --include bench --include fog +# 3. Enable pull request builds in your boostorg/ account. +# +# That's it - the script will do everything else for you. +# + +version: 1.0.{build}-{branch} + +shallow_clone: true + +branches: + only: + - master + - develop + - /bugfix\/.*/ + - /feature\/.*/ + - /fix\/.*/ + - /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: 32,64 + B2_LINK: shared,static + # B2_THREADING: threading=multi,single + B2_VARIANT: release + BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 + + matrix: + - FLAVOR: Visual Studio 2017 C++2a Strict + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + B2_CXXFLAGS: -permissive- + B2_CXXSTD: 2a + B2_TOOLSET: msvc-14.1 + + - FLAVOR: Visual Studio 2017 C++14/17 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + B2_CXXSTD: 14,17 + B2_TOOLSET: msvc-14.1 + + - FLAVOR: clang-cl + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + B2_ADDRESS_MODEL: 64 + B2_CXXSTD: 11,14,17 + B2_TOOLSET: clang-win + + - FLAVOR: Visual Studio 2015, 2013 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + B2_TOOLSET: msvc-12.0,msvc-14.0 + + - FLAVOR: 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: 32 + B2_CXXSTD: 03,11,14,1z + B2_THREADING: threadapi=pthread + B2_TOOLSET: gcc + + - FLAVOR: cygwin (64-bit) + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + ADDPATH: C:\cygwin64\bin; + B2_ADDRESS_MODEL: 64 + B2_CXXSTD: 03,11,14,1z + B2_THREADING: threadapi=pthread + B2_TOOLSET: gcc + + - FLAVOR: mingw64 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 + ADDPATH: C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin; + B2_ADDRESS_MODEL: 64 + B2_CXXSTD: 03,11,14,17,2a + B2_TOOLSET: gcc + +install: + - 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: ci\build.bat + diff --git a/.codecov.yml b/.codecov.yml new file mode 100644 index 000000000..00921954a --- /dev/null +++ b/.codecov.yml @@ -0,0 +1,23 @@ +# 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: 2 + 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: + - libs/date_time/test/ + - test diff --git a/.drone.star b/.drone.star deleted file mode 100644 index b41d688bd..000000000 --- a/.drone.star +++ /dev/null @@ -1,42 +0,0 @@ -# Use, modification, and distribution are -# subject to the Boost Software License, Version 1.0. (See accompanying -# file LICENSE.txt) -# -# Copyright Rene Rivera 2020. - -# For Drone CI we use the Starlark scripting language to reduce duplication. -# As the yaml syntax for Drone CI is rather limited. -# -# -globalenv={'B2_VARIANT': 'variant=release'} -linuxglobalimage="cppalliance/droneubuntu1604:1" -windowsglobalimage="cppalliance/dronevs2019" - -def main(ctx): - return [ - linux_cxx("B2_TOOLSET=gcc-4.8 B2_CXXSTD=03,11 BOOST_DATE Job 0", "g++-4.8", packages="g++-4.8", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu1404:1", environment={'B2_TOOLSET': 'gcc-4.8', 'B2_CXXSTD': '03,11', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'b6589fc6ab'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=gcc-4.9 B2_CXXSTD=03,11 BOOST_DATE Job 1", "g++-4.9", packages="g++-4.9", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu1404:1", environment={'B2_TOOLSET': 'gcc-4.9', 'B2_CXXSTD': '03,11', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '356a192b79'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=gcc-5 B2_CXXSTD=03,11 Job 2", "g++-5", packages="g++-5", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-5', 'B2_CXXSTD': '03,11', 'DRONE_JOB_UUID': 'da4b9237ba'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=gcc-6 B2_CXXSTD=11,14 BOOST_DATE_T Job 3", "g++-6", packages="g++-6", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-6', 'B2_CXXSTD': '11,14', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '77de68daec'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=gcc-7 B2_CXXSTD=14,17 BOOST_DATE_T Job 4", "g++-7", packages="g++-7", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-7', 'B2_CXXSTD': '14,17', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '1b64538924'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=gcc-8 B2_CXXSTD=17,2a BOOST_DATE_T Job 5", "g++-8", packages="g++-8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-8', 'B2_CXXSTD': '17,2a', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'ac3478d69a'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=gcc-9 B2_CXXSTD=17,2a BOOST_DATE_T Job 6", "g++-9", packages="g++-9", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'gcc-9', 'B2_CXXSTD': '17,2a', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'c1dfd96eea'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-3.8 B2_CXXSTD=03,11 BOOST_DA Job 7", "clang++-3.8", packages="clang-3.8 libstdc++-6-dev", llvm_os="xenial", llvm_ver="3.8", buildtype="boost", buildscript="drone", image="cppalliance/droneubuntu1404:1", environment={'B2_TOOLSET': 'clang-3.8', 'B2_CXXSTD': '03,11', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '902ba3cda1'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-4.0 B2_CXXSTD=11,14 BOOST_DA Job 8", "clang++-4.0", packages="clang-4.0 libstdc++-6-dev", llvm_os="xenial", llvm_ver="4.0", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-4.0', 'B2_CXXSTD': '11,14', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'fe5dbbcea5'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-5.0 B2_CXXSTD=11,14 BOOST_DA Job 9", "clang++-5.0", packages="clang-5.0 libstdc++-7-dev", llvm_os="xenial", llvm_ver="5.0", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-5.0', 'B2_CXXSTD': '11,14', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '0ade7c2cf9'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-6.0 B2_CXXSTD=14,17 BOOST_DA Job 10", "clang++-6.0", packages="clang-6.0 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="xenial", llvm_ver="6.0", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-6.0', 'B2_CXXSTD': '14,17', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'b1d5781111'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-7 B2_CXXSTD=17,2a BOOST_DATE Job 11", "clang++-7", packages="clang-7 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="xenial", llvm_ver="7", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-7', 'B2_CXXSTD': '17,2a', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '17ba079149'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-8 B2_CXXSTD=17,2a BOOST_DATE Job 12", "clang++-8", packages="clang-8 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="xenial", llvm_ver="8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-8', 'B2_CXXSTD': '17,2a', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '7b52009b64'}, globalenv=globalenv), - linux_cxx("B2_TOOLSET=clang-6.0 B2_CXXSTD=03,11,14 Job 13", "clang++-6.0", packages="clang-6.0 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="xenial", llvm_ver="6.0", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'B2_TOOLSET': 'clang-6.0', 'B2_CXXSTD': '03,11,14', 'B2_CXXFLAGS': '-stdlib=libc++', 'DRONE_JOB_UUID': 'bd307a3ec3'}, globalenv=globalenv), - osx_cxx("B2_TOOLSET=clang B2_CXXSTD=03,11,17 BOOST_DAT Job 14", "g++", packages="", buildtype="boost", buildscript="drone", environment={'B2_TOOLSET': 'clang', 'B2_CXXSTD': '03,11,17', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'fa35e19212'}, globalenv=globalenv), - linux_cxx("COMMENT=codecov.io B2_CXXSTD=03,11 B2_TOOLSET Job 15", "g++-8", packages="g++-8", buildtype="b5847f804b-0fcaf592f9", buildscript="drone", image=linuxglobalimage, environment={'COMMENT': 'codecov.io', 'B2_CXXSTD': '03,11', 'B2_TOOLSET': 'gcc-8', 'B2_DEFINES': 'define=BOOST_NO_STRESS_TEST=1', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': 'f1abd67035'}, globalenv=globalenv), - linux_cxx("COMMENT=asan B2_VARIANT=variant=debug B2_TOOL Job 16", "g++-8", packages="g++-8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'COMMENT': 'asan', 'B2_VARIANT': 'variant=debug', 'B2_TOOLSET': 'gcc-8', 'B2_CXXSTD': '03,11,14', 'B2_CXXFLAGS': 'address-sanitizer=norecover', 'B2_DEFINES': 'define=BOOST_NO_STRESS_TEST=1', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_EXTRA_PRIVILEGED': 'True', 'DRONE_JOB_UUID': '1574bddb75'}, globalenv=globalenv, privileged=True), - linux_cxx("COMMENT=tsan B2_VARIANT=variant=debug B2_TOOL Job 17", "g++-8", packages="g++-8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'COMMENT': 'tsan', 'B2_VARIANT': 'variant=debug', 'B2_TOOLSET': 'gcc-8', 'B2_CXXSTD': '03,11,14', 'B2_CXXFLAGS': 'thread-sanitizer=norecover', 'B2_DEFINES': 'define=BOOST_NO_STRESS_TEST=1', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '0716d9708d'}, globalenv=globalenv), - # allow_failures set for this job # - # linux_cxx("COMMENT=ubsan B2_VARIANT=variant=debug B2_TOO Job 18", "g++-8", packages="g++-8", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'COMMENT': 'ubsan', 'B2_VARIANT': 'variant=debug', 'B2_TOOLSET': 'gcc-8', 'B2_CXXSTD': '03,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', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '9e6a55b6b4'}, globalenv=globalenv), - linux_cxx("COMMENT=valgrind B2_TOOLSET=clang-6.0 B2_CXXS Job 19", "clang++-6.0", packages="clang-6.0 libc6-dbg libc++-dev libstdc++-8-dev", llvm_os="xenial", llvm_ver="6.0", buildtype="b5847f804b-db180b7bd2", buildscript="drone", image=linuxglobalimage, environment={'COMMENT': 'valgrind', 'B2_TOOLSET': 'clang-6.0', 'B2_CXXSTD': '03,11,14', 'B2_DEFINES': 'define=BOOST_NO_STRESS_TEST=1', 'B2_VARIANT': 'variant=debug', 'B2_TESTFLAGS': 'testing.launcher=valgrind', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'VALGRIND_OPTS': '--error-exitcode=1', 'DRONE_JOB_UUID': 'b3f0c7f6bb'}, globalenv=globalenv), - linux_cxx("COMMENT=Coverity Scan B2_TOOLSET=clang BOOS Job 20", "g++", packages="binutils-gold gdb libc6-dbg", buildtype="b5847f804b-cce9827eb5", buildscript="drone", image=linuxglobalimage, environment={'COMMENT': 'Coverity Scan', 'B2_TOOLSET': 'clang', 'BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS': '1', 'DRONE_JOB_UUID': '91032ad7bb'}, globalenv=globalenv), - ] - -# from https://github.com/boostorg/boost-ci -load("@boost_ci//ci/drone/:functions.star", "linux_cxx","windows_cxx","osx_cxx","freebsd_cxx") diff --git a/.drone/drone.sh b/.drone/drone.sh deleted file mode 100755 index 5f9c529b1..000000000 --- a/.drone/drone.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/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 -e -set -x -export TRAVIS_BUILD_DIR=$(pwd) -export DRONE_BUILD_DIR=$(pwd) -export TRAVIS_BRANCH=$DRONE_BRANCH -export VCS_COMMIT_ID=$DRONE_COMMIT -export GIT_COMMIT=$DRONE_COMMIT -export REPO_NAME=$DRONE_REPO -export PATH=~/.local/bin:/usr/local/bin:$PATH - -if [ "$DRONE_JOB_BUILDTYPE" == "boost" ]; then - -echo '==================================> INSTALL' - -git clone https://github.com/boostorg/boost-ci.git boost-ci -cp -pr boost-ci/ci boost-ci/.codecov.yml . - -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 - -echo '==================================> SCRIPT' - -cd $BOOST_ROOT/libs/$SELF -ci/travis/build.sh - -elif [ "$DRONE_JOB_BUILDTYPE" == "b5847f804b-0fcaf592f9" ]; then - -echo '==================================> INSTALL' - -git clone https://github.com/boostorg/boost-ci.git boost-ci -cp -pr boost-ci/ci boost-ci/.codecov.yml . - -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 - -echo '==================================> SCRIPT' - -cd $BOOST_ROOT/libs/$SELF -ci/travis/codecov.sh - -elif [ "$DRONE_JOB_BUILDTYPE" == "b5847f804b-db180b7bd2" ]; then - -echo '==================================> INSTALL' - -git clone https://github.com/boostorg/boost-ci.git boost-ci -cp -pr boost-ci/ci boost-ci/.codecov.yml . - -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 - -echo '==================================> SCRIPT' - -cd $BOOST_ROOT/libs/$SELF -ci/travis/valgrind.sh - -elif [ "$DRONE_JOB_BUILDTYPE" == "b5847f804b-cce9827eb5" ]; then - -echo '==================================> INSTALL' - -git clone https://github.com/boostorg/boost-ci.git boost-ci -cp -pr boost-ci/ci boost-ci/.codecov.yml . - -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 - -echo '==================================> SCRIPT' - -if [ -n "${COVERITY_SCAN_NOTIFICATION_EMAIL}" -a \( "$DRONE_BRANCH" = "develop" -o "$DRONE_BRANCH" = "master" \) -a "$DRONE_BUILD_EVENT" = "push" ] ; then -cd $BOOST_ROOT/libs/$SELF -ci/travis/coverity.sh -fi - -fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 318d8ac30..6e60b16ce 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,12 @@ -name: GitHub Actions CI +# Copyright 2020-2021 Peter Dimov +# Copyright 2021 Andrey Semashev +# Copyright 2021 Alexander Grund +# Copyright 2022 James E. King III +# +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) +--- +name: CI on: pull_request: @@ -6,542 +14,319 @@ on: branches: - master - develop - - githubactions* + - bugfix/** - feature/** - fix/** - pr/** +concurrency: + group: ${{format('{0}:{1}', github.repository, github.ref)}} + cancel-in-progress: true + env: - B2_VARIANT: variant=release + GIT_FETCH_JOBS: 8 + NET_RETRY_COUNT: 5 + B2_CI_VERSION: 1 + B2_VARIANT: debug,release + B2_LINK: shared,static + LCOV_BRANCH_COVERAGE: 0 + CODECOV_NAME: Github Actions + SELF_CONTAINED_HEADER_TESTS: 0 jobs: posix: + defaults: + run: + shell: bash + strategy: fail-fast: false matrix: include: - - name: "B2_TOOLSET=gcc-4.8 B2_CXXSTD=03,11 BOOST_DATE Job 0" - buildtype: "boost" - packages: "g++-4.8" - packages_to_remove: "" - os: "ubuntu-16.04" - container: "ubuntu:14.04" - cxx: "g++-4.8" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-4.8" - b2_cxxstd: "03,11" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=gcc-4.9 B2_CXXSTD=03,11 BOOST_DATE Job 1" - buildtype: "boost" - packages: "g++-4.9" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-4.9" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-4.9" - b2_cxxstd: "03,11" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=gcc-5 B2_CXXSTD=03,11 Job 2" - buildtype: "boost" - packages: "g++-5" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-5" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-5" - b2_cxxstd: "03,11" - - name: "B2_TOOLSET=gcc-6 B2_CXXSTD=11,14 BOOST_DATE_T Job 3" - buildtype: "boost" - packages: "g++-6" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-6" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-6" - b2_cxxstd: "11,14" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=gcc-7 B2_CXXSTD=14,17 BOOST_DATE_T Job 4" - buildtype: "boost" - packages: "g++-7" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-7" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-7" - b2_cxxstd: "14,17" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=gcc-8 B2_CXXSTD=17,2a BOOST_DATE_T Job 5" - buildtype: "boost" - packages: "g++-8" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-8" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-8" - b2_cxxstd: "17,2a" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=gcc-9 B2_CXXSTD=17,2a BOOST_DATE_T Job 6" - buildtype: "boost" - packages: "g++-9" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-9" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_toolset: "gcc-9" - b2_cxxstd: "17,2a" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-3.8 B2_CXXSTD=03,11 BOOST_DA Job 7" - buildtype: "boost" - packages: "clang-3.8 libstdc++-6-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - container: "ubuntu:14.04" - cxx: "clang++-3.8" - sources: "" - llvm_os: "xenial" - llvm_ver: "3.8" - b2_toolset: "clang-3.8" - b2_cxxstd: "03,11" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-4.0 B2_CXXSTD=11,14 BOOST_DA Job 8" - buildtype: "boost" - packages: "clang-4.0 libstdc++-6-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-4.0" - sources: "" - llvm_os: "xenial" - llvm_ver: "4.0" - b2_toolset: "clang-4.0" - b2_cxxstd: "11,14" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-5.0 B2_CXXSTD=11,14 BOOST_DA Job 9" - buildtype: "boost" - packages: "clang-5.0 libstdc++-7-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-5.0" - sources: "" - llvm_os: "xenial" - llvm_ver: "5.0" - b2_toolset: "clang-5.0" - b2_cxxstd: "11,14" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-6.0 B2_CXXSTD=14,17 BOOST_DA Job 10" - buildtype: "boost" - packages: "clang-6.0 libc6-dbg libc++-dev libstdc++-8-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-6.0" - sources: "" - llvm_os: "xenial" - llvm_ver: "6.0" - b2_toolset: "clang-6.0" - b2_cxxstd: "14,17" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-7 B2_CXXSTD=17,2a BOOST_DATE Job 11" - buildtype: "boost" - packages: "clang-7 libc6-dbg libc++-dev libstdc++-8-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-7" - sources: "" - llvm_os: "xenial" - llvm_ver: "7" - b2_toolset: "clang-7" - b2_cxxstd: "17,2a" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-8 B2_CXXSTD=17,2a BOOST_DATE Job 12" - buildtype: "boost" - packages: "clang-8 libc6-dbg libc++-dev libstdc++-8-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-8" - sources: "" - llvm_os: "xenial" - llvm_ver: "8" - b2_toolset: "clang-8" - b2_cxxstd: "17,2a" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "B2_TOOLSET=clang-6.0 B2_CXXSTD=03,11,14 Job 13" - buildtype: "boost" - packages: "clang-6.0 libc6-dbg libc++-dev libstdc++-8-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-6.0" - sources: "" - llvm_os: "xenial" - llvm_ver: "6.0" - b2_toolset: "clang-6.0" - b2_cxxstd: "03,11,14" - b2_cxxflags: "-stdlib=libc++" - - name: "COMMENT=codecov.io B2_CXXSTD=03,11 B2_TOOLSET Job 15" - buildtype: "b5847f804b-0fcaf592f9" - packages: "g++-8" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-8" - sources: "" - llvm_os: "" - llvm_ver: "" - comment: "codecov.io" - b2_cxxstd: "03,11" - b2_toolset: "gcc-8" - b2_defines: "define=BOOST_NO_STRESS_TEST=1" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "COMMENT=asan B2_VARIANT=variant=debug B2_TOOL Job 16" - buildtype: "boost" - packages: "g++-8" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-8" - sources: "" - llvm_os: "" - llvm_ver: "" - comment: "asan" - b2_variant: "variant=debug" - b2_toolset: "gcc-8" - b2_cxxstd: "03,11,14" - b2_cxxflags: "address-sanitizer=norecover" - b2_defines: "define=BOOST_NO_STRESS_TEST=1" - boost_date_time_test_without_self_contained_header_tests: "1" - - name: "COMMENT=tsan B2_VARIANT=variant=debug B2_TOOL Job 17" - buildtype: "boost" - packages: "g++-8" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++-8" - sources: "" - llvm_os: "" - llvm_ver: "" - comment: "tsan" - b2_variant: "variant=debug" - b2_toolset: "gcc-8" - b2_cxxstd: "03,11,14" - b2_cxxflags: "thread-sanitizer=norecover" - b2_defines: "define=BOOST_NO_STRESS_TEST=1" - boost_date_time_test_without_self_contained_header_tests: "1" -# -# - name: "COMMENT=ubsan B2_VARIANT=variant=debug B2_TOO Job 18" -# buildtype: "boost" -# packages: "g++-8" -# packages_to_remove: "" -# os: "ubuntu-16.04" -# cxx: "g++-8" -# sources: "" -# llvm_os: "" -# llvm_ver: "" -# comment: "ubsan" -# b2_variant: "variant=debug" -# b2_toolset: "gcc-8" -# b2_cxxstd: "03,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" -# boost_date_time_test_without_self_contained_header_tests: "1" - - name: "COMMENT=valgrind B2_TOOLSET=clang-6.0 B2_CXXS Job 19" - buildtype: "b5847f804b-db180b7bd2" - packages: "clang-6.0 libc6-dbg libc++-dev libstdc++-8-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "clang++-6.0" - sources: "" - llvm_os: "xenial" - llvm_ver: "6.0" - comment: "valgrind" - b2_toolset: "clang-6.0" - b2_cxxstd: "03,11,14" - b2_defines: "define=BOOST_NO_STRESS_TEST=1" - b2_variant: "variant=debug" - b2_testflags: "testing.launcher=valgrind" - boost_date_time_test_without_self_contained_header_tests: "1" - valgrind_opts: "--error-exitcode=1" - - name: "COMMENT=Coverity Scan B2_TOOLSET=clang BOOS Job 20" - buildtype: "b5847f804b-cce9827eb5" - packages: "binutils-gold gdb libc6-dbg" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++" - sources: "" - llvm_os: "" - llvm_ver: "" - comment: "Coverity Scan" - b2_toolset: "clang" - boost_date_time_test_without_self_contained_header_tests: "1" - - runs-on: ${{ matrix.os }} - container: ${{ matrix.container }} + # Linux, gcc + - { compiler: gcc-4.8, cxxstd: '03,11', os: ubuntu-18.04 } + - { compiler: gcc-5, cxxstd: '03,11', os: ubuntu-18.04 } + - { compiler: gcc-6, cxxstd: '03,11,14,17', os: ubuntu-18.04 } + - { compiler: gcc-7, cxxstd: '03,11,14,17', os: ubuntu-18.04 } + - { compiler: gcc-8, cxxstd: '03,11,14,17,2a', os: ubuntu-18.04 } + - { compiler: gcc-9, cxxstd: '03,11,14,17,2a', os: ubuntu-18.04 } + - { compiler: gcc-10, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + - { compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, self-contained-header-tests: 1 } + # disabled: there are too many issues in serialization and not enough time to add suppressions + # - { name: GCC w/ sanitizers, sanitize: yes, + # compiler: gcc-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + - { name: Collect coverage, coverage: yes, + compiler: gcc-10, cxxstd: '03,11', os: ubuntu-20.04, install: 'g++-10-multilib', address-model: '32,64' } + + # Linux, clang + - { compiler: clang-3.9, cxxstd: '03,11,14', os: ubuntu-18.04 } + - { compiler: clang-4.0, cxxstd: '03,11,14', os: ubuntu-18.04 } + - { compiler: clang-5.0, cxxstd: '03,11,14,1z', os: ubuntu-18.04 } + - { compiler: clang-6.0, cxxstd: '03,11,14,17', os: ubuntu-18.04 } + - { compiler: clang-7, cxxstd: '03,11,14,17', os: ubuntu-18.04 } + # Note: clang-8 does not fully support C++20, so it is not compatible with some libstdc++ versions in this mode + - { compiler: clang-8, cxxstd: '03,11,14,17,2a', os: ubuntu-18.04, install: 'clang-8 g++-7', gcc_toolchain: 7 } + - { compiler: clang-9, cxxstd: '03,11,14,17,2a', os: ubuntu-20.04 } + - { compiler: clang-10, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + - { compiler: clang-11, cxxstd: '03,11,14,17,20', os: ubuntu-20.04 } + - { compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, self-contained-header-tests: 1 } + + # libc++ + - { compiler: clang-6.0, cxxstd: '03,11,14', os: ubuntu-18.04, stdlib: libc++, install: 'clang-6.0 libc++-dev libc++abi-dev' } + - { compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev', self-contained-header-tests: 1 } + # disabled: there are too many issues in serialization and not enough time to add suppressions + # - { name: Clang w/ sanitizers, sanitize: yes, + # compiler: clang-12, cxxstd: '03,11,14,17,20', os: ubuntu-20.04, stdlib: libc++, install: 'clang-12 libc++-12-dev libc++abi-12-dev' } + + # OSX, clang + # sanitize disabled: there are too many issues in serialization and not enough time to add suppressions + - { compiler: clang, cxxstd: '03,11,14,17,2a', os: macos-11 } + + # Coverity Scan + # requires two github secrets in repo to activate; see ci/github/coverity.sh + # does not run on pull requests, only on pushes into develop and master + - { name: Coverity, coverity: yes, + compiler: clang-10, cxxstd: '17', os: ubuntu-20.04, ccache: no } + + # multiarch (bigendian testing) - does not support coverage yet + # date_time has no endian compile-time branches + # - { name: Big-endian, multiarch: yes, + # compiler: clang, cxxstd: '17', os: ubuntu-20.04, ccache: no, distro: fedora, edition: 34, arch: s390x } + + + timeout-minutes: 120 + runs-on: ${{matrix.os}} + container: ${{matrix.container}} + env: {B2_USE_CCACHE: 1} steps: - - name: Check if running in container - if: matrix.container != '' - run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV - - name: If running in container, upgrade packages - if: matrix.container != '' + - name: Setup environment run: | - sudo apt-get -o Acquire::Retries=3 update && DEBIAN_FRONTEND=noninteractive apt-get -y install tzdata && apt-get -o Acquire::Retries=3 install -y sudo software-properties-common wget curl apt-transport-https make apt-file sudo unzip libssl-dev build-essential autotools-dev autoconf automake g++ libc++-helpers python python-pip ruby cpio gcc-multilib g++-multilib pkgconf python3 python3-pip ccache libpython-dev - sudo apt-add-repository ppa:git-core/ppa - sudo apt-get -o Acquire::Retries=3 update && apt-get -o Acquire::Retries=3 -y install git - sudo python -m pip install --upgrade pip==20.3.4 - sudo /usr/local/bin/pip install cmake - - - uses: actions/checkout@v2 - - - name: linux - shell: bash - env: - CXX: ${{ matrix.cxx }} - SOURCES: ${{ matrix.sources }} - LLVM_OS: ${{ matrix.llvm_os }} - LLVM_VER: ${{ matrix.llvm_ver }} - PACKAGES: ${{ matrix.packages }} - PACKAGES_TO_REMOVE: ${{ matrix.packages_to_remove }} - JOB_BUILDTYPE: ${{ matrix.buildtype }} - B2_TOOLSET: ${{ matrix.b2_toolset }} - B2_CXXSTD: ${{ matrix.b2_cxxstd }} - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: ${{ matrix.boost_date_time_test_without_self_contained_header_tests }} - B2_CXXFLAGS: ${{ matrix.b2_cxxflags }} - COMMENT: ${{ matrix.comment }} - B2_DEFINES: ${{ matrix.b2_defines }} - B2_VARIANT: ${{ matrix.b2_variant }} - B2_LINKFLAGS: ${{ matrix.b2_linkflags }} - UBSAN_OPTIONS: ${{ matrix.ubsan_options }} - B2_TESTFLAGS: ${{ matrix.b2_testflags }} - VALGRIND_OPTS: ${{ matrix.valgrind_opts }} - TRAVIS_BRANCH: ${{ github.base_ref }} - TRAVIS_OS_NAME: "linux" + if [ -f "/etc/debian_version" ]; then + echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV + export DEBIAN_FRONTEND=noninteractive + fi + if [ -n "${{matrix.container}}" ] && [ -f "/etc/debian_version" ]; then + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common + # Need (newer) git + for i in {1..${NET_RETRY_COUNT:-3}}; do sudo -E add-apt-repository -y ppa:git-core/ppa && break || sleep 10; done + apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y g++ python libpython-dev git + fi + # multiple job types are not compatible with ccache, they use "ccache: no" in the matrix + if [[ "${{ matrix.ccache }}" == "no" ]]; then + echo "B2_USE_CCACHE=0" >> $GITHUB_ENV + fi + git config --global pack.threads 0 + + - uses: actions/checkout@v3 + with: + # For coverage builds fetch the whole history, else only 1 commit using a 'fake ternary' + fetch-depth: ${{ matrix.coverage && '0' || '1' }} + + - name: Cache ccache + uses: actions/cache@v3 + if: env.B2_USE_CCACHE + with: + path: ~/.ccache + key: ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}-${{github.sha}} + restore-keys: | + ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}}- + ${{matrix.os}}-${{matrix.container}}-${{matrix.compiler}} + + - name: Fetch Boost.CI + uses: actions/checkout@v3 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned + + - name: Get CI scripts folder run: | - echo '==================================> SETUP' - echo '==================================> PACKAGES' - set -e - if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi - echo ">>>>> APT: REPO.." - for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done - - if test -n "${LLVM_OS}" ; then - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - - if test -n "${LLVM_VER}" ; then - sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main" - else - # Snapshot (i.e. trunk) build of clang - sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main" - fi - fi - echo ">>>>> APT: UPDATE.." - sudo -E apt-get -o Acquire::Retries=3 update - if test -n "${SOURCES}" ; then - echo ">>>>> APT: INSTALL SOURCES.." - for SOURCE in $SOURCES; do - sudo -E apt-add-repository ppa:$SOURCE - done - fi - echo ">>>>> APT: INSTALL ${PACKAGES}.." - sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES} - - echo '==================================> INSTALL AND COMPILE' - set -e - export TRAVIS_BUILD_DIR=$(pwd) - export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} - export VCS_COMMIT_ID=$GITHUB_SHA - export GIT_COMMIT=$GITHUB_SHA - export REPO_NAME=$(basename $GITHUB_REPOSITORY) - export USER=$(whoami) - export CC=${CC:-gcc} - export PATH=~/.local/bin:/usr/local/bin:$PATH - - if [ "$JOB_BUILDTYPE" == "boost" ]; then - - echo '==================================> INSTALL' - - git clone https://github.com/boostorg/boost-ci.git boost-ci - cp -pr boost-ci/ci boost-ci/.codecov.yml . - - 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 - - echo '==================================> SCRIPT' - - cd $BOOST_ROOT/libs/$SELF - ci/travis/build.sh - - elif [ "$JOB_BUILDTYPE" == "b5847f804b-0fcaf592f9" ]; then - - echo '==================================> INSTALL' - - git clone https://github.com/boostorg/boost-ci.git boost-ci - cp -pr boost-ci/ci boost-ci/.codecov.yml . - - 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 - - echo '==================================> SCRIPT' - - cd $BOOST_ROOT/libs/$SELF - ci/travis/codecov.sh - - elif [ "$JOB_BUILDTYPE" == "b5847f804b-db180b7bd2" ]; then - - echo '==================================> INSTALL' - - git clone https://github.com/boostorg/boost-ci.git boost-ci - cp -pr boost-ci/ci boost-ci/.codecov.yml . - - 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) + # Copy ci folder if not testing Boost.CI + [[ "$GITHUB_REPOSITORY" =~ "boost-ci" ]] || cp -r boost-ci-cloned/ci . + rm -rf boost-ci-cloned - . ./ci/common_install.sh - - echo '==================================> SCRIPT' - - cd $BOOST_ROOT/libs/$SELF - ci/travis/valgrind.sh - - elif [ "$JOB_BUILDTYPE" == "b5847f804b-cce9827eb5" ]; then - - echo '==================================> INSTALL' - - git clone https://github.com/boostorg/boost-ci.git boost-ci - cp -pr boost-ci/ci boost-ci/.codecov.yml . - - 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 - - echo '==================================> SCRIPT' + - name: Install packages + if: startsWith(matrix.os, 'ubuntu') + run: | + SOURCE_KEYS=(${{join(matrix.source_keys, ' ')}}) + SOURCES=(${{join(matrix.sources, ' ')}}) + # Add this by default + SOURCES+=(ppa:ubuntu-toolchain-r/test) + for key in "${SOURCE_KEYS[@]}"; do + for i in {1..$NET_RETRY_COUNT}; do + wget -O - "$key" | sudo apt-key add - && break || sleep 10 + done + done + for source in "${SOURCES[@]}"; do + for i in {1..$NET_RETRY_COUNT}; do + sudo add-apt-repository $source && break || sleep 10 + done + done + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update + if [[ -z "${{matrix.install}}" ]]; then + pkgs="${{matrix.compiler}}" + pkgs="${pkgs/gcc-/g++-}" + else + pkgs="${{matrix.install}}" + fi + sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y $pkgs + + - name: Setup GCC Toolchain + if: matrix.gcc_toolchain + run: | + GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain" + echo "GCC_TOOLCHAIN_ROOT=$GCC_TOOLCHAIN_ROOT" >> $GITHUB_ENV + MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)" + mkdir -p "$GCC_TOOLCHAIN_ROOT" + ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include" + ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin" + mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET" + ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" + + - name: Setup multiarch + if: matrix.multiarch + run: | + sudo apt-get install --no-install-recommends -y binfmt-support qemu-user-static + sudo docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + git clone https://github.com/jeking3/bdde.git + echo "$(pwd)/bdde/bin/linux" >> ${GITHUB_PATH} + echo "BDDE_DISTRO=${{ matrix.distro }}" >> ${GITHUB_ENV} + echo "BDDE_EDITION=${{ matrix.edition }}" >> ${GITHUB_ENV} + echo "BDDE_ARCH=${{ matrix.arch }}" >> ${GITHUB_ENV} + echo "B2_WRAPPER=bdde" >> ${GITHUB_ENV} + + - name: Setup Boost + env: + B2_ADDRESS_MODEL: ${{matrix.address-model}} + B2_COMPILER: ${{matrix.compiler}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_SANITIZE: ${{matrix.sanitize}} + B2_STDLIB: ${{matrix.stdlib}} + run: source ci/github/install.sh + + - name: Setup coverage collection + if: matrix.coverage + run: ci/github/codecov.sh "setup" + + - name: Run tests + if: '!matrix.coverity' + run: ci/build.sh + env: + BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: ${{ !(matrix.self-contained-header-tests || env.SELF_CONTAINED_HEADER_TESTS) }} - if [ -n "${COVERITY_SCAN_NOTIFICATION_EMAIL}" -a \( "$TRAVIS_BRANCH" = "develop" -o "$TRAVIS_BRANCH" = "master" \) -a \("$GITHUB_EVENT_NAME" = "push" -o "$GITHUB_EVENT_NAME" = "cron" \) ] ; then - cd $BOOST_ROOT/libs/$SELF - ci/travis/coverity.sh - fi + - name: Upload coverage + if: matrix.coverage + run: ci/codecov.sh "upload" - fi - osx: + - name: Run coverity + if: matrix.coverity && github.event_name == 'push' && (github.ref_name == 'develop' || github.ref_name == 'master') + run: ci/github/coverity.sh + env: + BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: ${{ !(matrix.self-contained-header-tests || env.SELF_CONTAINED_HEADER_TESTS) }} + COVERITY_SCAN_NOTIFICATION_EMAIL: ${{ secrets.COVERITY_SCAN_NOTIFICATION_EMAIL }} + COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} + + windows: + defaults: + run: + shell: cmd strategy: fail-fast: false matrix: include: - - name: "B2_TOOLSET=clang B2_CXXSTD=03,11,17 BOOST_DAT Job 14" - buildtype: "boost" - packages: "" - os: "macos-10.15" - cxx: "g++" - sources: "" - llvm_os: "" - llvm_ver: "" - xcode_version: 11.7 - b2_toolset: "clang" - b2_cxxstd: "03,11,17" - boost_date_time_test_without_self_contained_header_tests: "1" - - runs-on: ${{ matrix.os }} + - { toolset: msvc-14.2, cxxstd: '14,17,20', addrmd: '32,64', os: windows-2019, self-contained-header-tests: 1 } + - { name: Collect coverage, coverage: yes, + toolset: msvc-14.3, cxxstd: '14,17,20', addrmd: '32,64', os: windows-2022 } + - { toolset: gcc, cxxstd: '03,11,14,17,2a', addrmd: '64', os: windows-2019 } + + runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v2 - - name: Set DEVELOPER_DIR - if: matrix.xcode_version != '' - run: echo "DEVELOPER_DIR=/Applications/Xcode_${{ matrix.xcode_version }}.app/Contents/Developer" >> $GITHUB_ENV - - name: Test DEVELOPER_DIR - run: echo $DEVELOPER_DIR - - - name: "osx" - shell: bash - env: - CXX: ${{ matrix.cxx }} - SOURCES: ${{ matrix.sources }} - LLVM_OS: ${{ matrix.llvm_os }} - LLVM_VER: ${{ matrix.llvm_ver }} - PACKAGES: ${{ matrix.packages }} - JOB_BUILDTYPE: ${{ matrix.buildtype }} - B2_TOOLSET: ${{ matrix.b2_toolset }} - B2_CXXSTD: ${{ matrix.b2_cxxstd }} - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: ${{ matrix.boost_date_time_test_without_self_contained_header_tests }} - B2_CXXFLAGS: ${{ matrix.b2_cxxflags }} - COMMENT: ${{ matrix.comment }} - B2_DEFINES: ${{ matrix.b2_defines }} - B2_VARIANT: ${{ matrix.b2_variant }} - B2_LINKFLAGS: ${{ matrix.b2_linkflags }} - UBSAN_OPTIONS: ${{ matrix.ubsan_options }} - B2_TESTFLAGS: ${{ matrix.b2_testflags }} - VALGRIND_OPTS: ${{ matrix.valgrind_opts }} - TRAVIS_BRANCH: ${{ github.base_ref }} - TRAVIS_OS_NAME: "osx" + - 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: | - echo '==================================> SETUP' - set -e - sudo mv /Library/Developer/CommandLineTools /Library/Developer/CommandLineTools.bck - echo '==================================> PACKAGES' - echo '==================================> INSTALL AND COMPILE' - set -e - export TRAVIS_BUILD_DIR=$(pwd) - export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} - export VCS_COMMIT_ID=$GITHUB_SHA - export GIT_COMMIT=$GITHUB_SHA - export REPO_NAME=$(basename $GITHUB_REPOSITORY) - export USER=$(whoami) - export CC=${CC:-gcc} - export PATH=~/.local/bin:/usr/local/bin:$PATH + REM Copy ci folder if not testing Boost.CI + if "%GITHUB_REPOSITORY%" == "%GITHUB_REPOSITORY:boost-ci=%" xcopy /s /e /q /i /y boost-ci-cloned\ci .\ci + rmdir /s /q boost-ci-cloned - if [ "$JOB_BUILDTYPE" == "boost" ]; then + - name: Setup Boost + run: ci\github\install.bat - echo '==================================> INSTALL' + - name: Run tests + if: '!matrix.coverage' + run: ci\build.bat + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: ${{ !(matrix.self-contained-header-tests || env.SELF_CONTAINED_HEADER_TESTS) }} + + - name: Collect coverage + shell: powershell + if: matrix.coverage + run: ci\opencppcoverage.ps1 + env: + B2_TOOLSET: ${{matrix.toolset}} + B2_CXXSTD: ${{matrix.cxxstd}} + B2_ADDRESS_MODEL: ${{matrix.addrmd}} + BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: ${{ !(matrix.self-contained-header-tests || env.SELF_CONTAINED_HEADER_TESTS) }} + + - name: Upload coverage + if: matrix.coverage + uses: codecov/codecov-action@v2 + with: + files: __out/cobertura.xml + + CMake: + defaults: + run: + shell: bash - git clone https://github.com/boostorg/boost-ci.git boost-ci - cp -pr boost-ci/ci boost-ci/.codecov.yml . + strategy: + fail-fast: false + matrix: + include: + - { os: ubuntu-20.04, build_shared: ON, build_type: Release, generator: 'Unix Makefiles' } + - { os: ubuntu-20.04, build_shared: OFF, build_type: Debug, generator: 'Unix Makefiles' } + - { os: windows-2019, build_shared: ON, build_type: Release, generator: 'Visual Studio 16 2019' } + - { os: windows-2019, build_shared: OFF, build_type: Debug, generator: 'Visual Studio 16 2019' } - if [ "$TRAVIS_OS_NAME" == "osx" ]; then - unset -f cd - fi + timeout-minutes: 120 + runs-on: ${{matrix.os}} - export SELF=`basename $REPO_NAME` - export BOOST_CI_TARGET_BRANCH="$TRAVIS_BRANCH" - export BOOST_CI_SRC_FOLDER=$(pwd) + steps: + - uses: actions/checkout@v2 - . ./ci/common_install.sh + - name: Fetch Boost.CI + uses: actions/checkout@v2 + with: + repository: boostorg/boost-ci + ref: master + path: boost-ci-cloned - echo '==================================> SCRIPT' + - 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 - cd $BOOST_ROOT/libs/$SELF - ci/travis/build.sh + - name: Setup Boost + env: {B2_DONT_BOOTSTRAP: 1} + run: source ci/github/install.sh - fi + - name: Run CMake + 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 . --config ${{matrix.build_type}} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index a13811bd3..000000000 --- a/.travis.yml +++ /dev/null @@ -1,231 +0,0 @@ -# Copyright 2016 Peter Dimov -# Copyright 2017 - 2019 James E. King III -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) - -# -# 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. Enable pull request builds in your boostorg/ account. -# -# That's it - the scripts will do everything else for you. - -dist: xenial -language: cpp - -env: - global: - # see: http://www.boost.org/build/doc/html/bbv2/overview/invocation.html#bbv2.overview.invocation.properties - # - B2_ADDRESS_MODEL=address-model=64,32 - # - B2_LINK=link=shared,static - # - B2_THREADING=threading=multi,single - - B2_VARIANT=variant=release - -install: - - git clone https://github.com/boostorg/boost-ci.git boost-ci - - cp -pr boost-ci/ci boost-ci/.codecov.yml . - - source ci/travis/install.sh - -addons: - apt: - packages: - - binutils-gold - - gdb - - libc6-dbg - -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: - # https://github.com/boostorg/date_time/issues/111 - - env: - - COMMENT=ubsan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=03,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 - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - - include: - # libstdc++ - - { os: "linux", dist: "trusty", # xenial has libstdc++ from gcc 5.4.0 with newer ABI - env: [ "B2_TOOLSET=gcc-4.8", "B2_CXXSTD=03,11", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], 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=03,11", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *gcc-49 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-5", "B2_CXXSTD=03,11" ], addons: *gcc-5 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-6", "B2_CXXSTD=11,14", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *gcc-6 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-7", "B2_CXXSTD=14,17", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *gcc-7 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-8", "B2_CXXSTD=17,2a", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *gcc-8 } - - { os: "linux", env: [ "B2_TOOLSET=gcc-9", "B2_CXXSTD=17,2a", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], 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=03,11", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *clang-38 } - - { os: "linux", env: [ "B2_TOOLSET=clang-4.0", "B2_CXXSTD=11,14", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *clang-4 } - - { os: "linux", env: [ "B2_TOOLSET=clang-5.0", "B2_CXXSTD=11,14", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *clang-5 } - - { os: "linux", env: [ "B2_TOOLSET=clang-6.0", "B2_CXXSTD=14,17", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *clang-6 } - - { os: "linux", env: [ "B2_TOOLSET=clang-7", "B2_CXXSTD=17,2a", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *clang-7 } - - { os: "linux", env: [ "B2_TOOLSET=clang-8", "B2_CXXSTD=17,2a", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ], addons: *clang-8 } - - # libc++ - - { os: "linux", env: [ "B2_TOOLSET=clang-6.0", "B2_CXXSTD=03,11,14", - "B2_CXXFLAGS=-stdlib=libc++" ], addons: *clang-6 } - - { os: "osx" , env: [ "B2_TOOLSET=clang", "B2_CXXSTD=03,11,17", "BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1" ] } - - # to enable Intel ICC define INTEL_ICC_SERIAL_NUMBER and the following: - # - { 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 } - - - os: linux - env: - - COMMENT=codecov.io - - B2_CXXSTD=03,11 - - B2_TOOLSET=gcc-8 - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - addons: *gcc-8 - script: - - cd $BOOST_ROOT/libs/$SELF - - ci/travis/codecov.sh - - - os: linux - env: - - COMMENT=asan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=03,11,14 - - B2_CXXFLAGS="address-sanitizer=norecover" - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - addons: *gcc-8 - - - os: linux - env: - - COMMENT=tsan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=03,11,14 - - B2_CXXFLAGS="thread-sanitizer=norecover" - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - addons: *gcc-8 - - - os: linux - env: - - COMMENT=ubsan - - B2_VARIANT=variant=debug - - B2_TOOLSET=gcc-8 - - B2_CXXSTD=03,11,14 - - B2_CXXFLAGS="undefined-sanitizer=norecover" - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - # https://github.com/boostorg/build/issues/451 using the gold linker to work around an issue - - B2_LINKFLAGS="linkflags=-fuse-ld=gold" - - UBSAN_OPTIONS=print_stacktrace=1 - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - addons: *gcc-8 - - - os: linux - env: - - COMMENT=valgrind - - B2_TOOLSET=clang-6.0 - - B2_CXXSTD=03,11,14 - - B2_DEFINES="define=BOOST_NO_STRESS_TEST=1" - - B2_VARIANT=variant=debug - - B2_TESTFLAGS=testing.launcher=valgrind - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - - VALGRIND_OPTS=--error-exitcode=1 - addons: *clang-6 - script: - - cd $BOOST_ROOT/libs/$SELF - - ci/travis/valgrind.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 - - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS=1 - script: - - cd $BOOST_ROOT/libs/$SELF - - ci/travis/coverity.sh - -notifications: - email: - false diff --git a/.ubsan-ignorelist b/.ubsan-ignorelist new file mode 100644 index 000000000..f19685536 --- /dev/null +++ b/.ubsan-ignorelist @@ -0,0 +1,4 @@ +# https://github.com/boostorg/serialization/issues/122 +vptr:/usr/include/c++/*/bits/ios_base.h +# https://github.com/boostorg/serialization/issues/193 +# could not figure out how to suppress it diff --git a/README.md b/README.md index 363c2af2b..38b1ef295 100644 --- a/README.md +++ b/README.md @@ -11,25 +11,25 @@ Distributed under the [Boost Software License, Version 1.0](http://www.boost.org ### Build Status -Branch | Travis | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | +Branch | GHA CI | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests | :-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- | -[`master`](https://github.com/boostorg/date_time/tree/master) | [![Build Status](https://travis-ci.org/boostorg/date_time.svg?branch=master)](https://travis-ci.org/boostorg/date_time) | [![Build status](https://ci.appveyor.com/api/projects/status/upf5c528fy09fudk?svg=true)](https://ci.appveyor.com/project/jeking3/date-time-1evbf) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/date_time.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/date_time.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/date_time.html) -[`develop`](https://github.com/boostorg/date_time/tree/develop) | [![Build Status](https://travis-ci.org/boostorg/date_time.svg?branch=develop)](https://travis-ci.org/boostorg/date_time) | [![Build status](https://ci.appveyor.com/api/projects/status/upf5c528fy09fudk/branch/develop?svg=true)](https://ci.appveyor.com/project/boostorg/date_time/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/date_time.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/date_time.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/date_time.html) +[`master`](https://github.com/boostorg/date_time/tree/master) | [![Build Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/boostorg/date_time/actions?query=branch:master) | [![Build status](https://ci.appveyor.com/api/projects/status/upf5c528fy09fudk/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/date-time-1evbf/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch/master) | [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/date_time.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/date_time.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/date_time.html) +[`develop`](https://github.com/boostorg/date_time/tree/develop) | [![Build Status](https://github.com/boostorg/date_time/actions/workflows/ci.yml/badge.svg?branch=develop)](https://github.com/boostorg/date_time/actions?query=branch:develop) | [![Build status](https://ci.appveyor.com/api/projects/status/upf5c528fy09fudk/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/date-time-1evbf/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/14908/badge.svg)](https://scan.coverity.com/projects/boostorg-date_time) | [![codecov](https://codecov.io/gh/boostorg/date_time/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/date_time/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/date_time.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/date_time.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/date_time.html) ### Directories Note that the built library is only for build backward compatibility and contains no symbols. date_time is now header only. -| Name | Purpose | -| --------- | ------------------------------ | -| `build` | build script for optional lib build | -| `data` | timezone database | -| `doc` | documentation | -| `example` | use case examples | -| `include` | headers | +| Name | Purpose | +| --------- | --------------------------------------- | +| `build` | build script for optional lib build | +| `data` | timezone database | +| `doc` | documentation | +| `example` | use case examples | +| `include` | headers | | `src` | source code for optional link library | -| `test` | unit tests | -| `xmldoc` | documentation source | +| `test` | unit tests | +| `xmldoc` | documentation source | ### More information diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 6fe9ed8cf..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright 2016, 2017 Peter Dimov -# Copyright (C) 2017 - 2019 James E. King III -# Distributed under the Boost Software License, Version 1.0. -# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt) - -# -# Generic Appveyor build script for boostorg repositories -# See: https://github.com/boostorg/boost-ci/ -# -# Instructions for customizing this script for your library: -# -# 1. Customize the compilers and language levels you want. -# 2. If you have more than include/, src/, test/, example/, examples/, -# benchmark/ or tools/ directories, set the environment variable DEPINST. -# For example if your build uses code in "bench/" and "fog/" directories: -# - DEPINST: --include bench --include fog -# 3. Enable pull request builds in your boostorg/ account. -# -# That's it - the script will do everything else for you. -# - -version: 1.0.{build}-{branch} - -shallow_clone: true - -branches: - only: - - master - - develop - - /bugfix\/.*/ - - /feature\/.*/ - - /fix\/.*/ - - /pr\/.*/ - -matrix: - # Adding MAYFAIL to any matrix job allows it to fail but the build stays green: - allow_failures: - - MAYFAIL: true - -environment: - global: - # 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_THREADING: threading=multi,single - B2_LINK: link=shared,static - B2_VARIANT: variant=release - - matrix: - - FLAVOR: Visual Studio 2019 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXFLAGS: cxxflags=-permissive- - B2_CXXSTD: latest # 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: latest # 2a - B2_TOOLSET: msvc-14.1 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - FLAVOR: Visual Studio 2017 C++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 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - FLAVOR: Visual Studio 2017 C++14 (Default) - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: address-model=64,32 - B2_TOOLSET: msvc-14.1 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - FLAVOR: clang-cl - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - B2_ADDRESS_MODEL: address-model=64 - B2_CXXSTD: 11 - B2_TOOLSET: clang-win - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - 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 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - FLAVOR: Visual Studio 2010, 2012, 2013 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 - B2_TOOLSET: msvc-10.0,msvc-11.0,msvc-12.0 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - 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_TOOLSET: gcc - B2_VARIANT: variant=debug - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - 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_TOOLSET: gcc - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - 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 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - - - 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 - BOOST_DATE_TIME_TEST_WITHOUT_SELF_CONTAINED_HEADER_TESTS: 1 - -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 - - 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) diff --git a/example/gregorian/dates_as_strings.cpp b/example/gregorian/dates_as_strings.cpp index 097fffbc8..273b0aec1 100644 --- a/example/gregorian/dates_as_strings.cpp +++ b/example/gregorian/dates_as_strings.cpp @@ -25,7 +25,7 @@ main() date d(from_simple_string(s)); std::cout << to_simple_string(d) << std::endl; - //Read ISO Standard(CCYYMMDD) and output ISO Extended + //Read ISO 8601 Standard(CCYYMMDD) and output ISO 8601 Extended std::string ud("20011009"); //2001-Oct-09 date d1(from_undelimited_string(ud)); std::cout << to_iso_extended_string(d1) << std::endl; diff --git a/example/gregorian/localization.cpp b/example/gregorian/localization.cpp index 25856f638..b297135b4 100644 --- a/example/gregorian/localization.cpp +++ b/example/gregorian/localization.cpp @@ -83,7 +83,7 @@ int main() us_facet->format("%m/%d/%Y"); std::cout << d1 << std::endl; // 10/01/2002 - // English names, iso order (year-month-day), '-' separator + // English names, ISO 8601 order (year-month-day), '-' separator us_facet->format("%Y-%b-%d"); std::cout << d1 << std::endl; // 2002-Oct-01 diff --git a/include/boost/date_time/date.hpp b/include/boost/date_time/date.hpp index ef98cb289..72be68db1 100644 --- a/include/boost/date_time/date.hpp +++ b/include/boost/date_time/date.hpp @@ -21,7 +21,7 @@ namespace date_time { /*! The date template represents an interface shell for a date class that is based on a year-month-day system such as the gregorian - or iso systems. It provides basic operations to enable calculation + or ISO 8601 systems. It provides basic operations to enable calculation and comparisons. Theory diff --git a/include/boost/date_time/gregorian/formatters.hpp b/include/boost/date_time/gregorian/formatters.hpp index d486ef0f4..1222b59fe 100644 --- a/include/boost/date_time/gregorian/formatters.hpp +++ b/include/boost/date_time/gregorian/formatters.hpp @@ -65,7 +65,7 @@ namespace gregorian { std::basic_string s(date_time::date_formatter,charT>::date_to_string(d.begin())); return s + sep + date_time::date_formatter,charT>::date_to_string(d.last()); } - //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231 + //! Date period to ISO 8601 standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231 /*!\ingroup date_format */ inline std::string to_iso_string(const date_period& d) { @@ -78,7 +78,7 @@ namespace gregorian { inline std::basic_string to_iso_extended_string_type(const date& d) { return date_time::date_formatter,charT>::date_to_string(d); } - //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31 + //! Convert to ISO 8601 extended format string CCYY-MM-DD. Example 2002-12-31 /*!\ingroup date_format */ inline std::string to_iso_extended_string(const date& d) { @@ -90,7 +90,7 @@ namespace gregorian { inline std::basic_string to_iso_string_type(const date& d) { return date_time::date_formatter,charT>::date_to_string(d); } - //! Convert to iso standard string YYYYMMDD. Example: 20021231 + //! Convert to ISO 8601 standard string YYYYMMDD. Example: 20021231 /*!\ingroup date_format */ inline std::string to_iso_string(const date& d) { diff --git a/include/boost/date_time/gregorian/formatters_limited.hpp b/include/boost/date_time/gregorian/formatters_limited.hpp index 755f5aa68..1763b2049 100644 --- a/include/boost/date_time/gregorian/formatters_limited.hpp +++ b/include/boost/date_time/gregorian/formatters_limited.hpp @@ -35,7 +35,7 @@ namespace gregorian { return std::string("[" + d1 + "/" + d2 + "]"); } - //! Date period to iso standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231 + //! Date period to ISO 8601 standard format CCYYMMDD/CCYYMMDD. Example: 20021225/20021231 /*!\ingroup date_format */ inline std::string to_iso_string(const date_period& d) { @@ -44,14 +44,14 @@ namespace gregorian { } - //! Convert to iso extended format string CCYY-MM-DD. Example 2002-12-31 + //! Convert to ISO 8601 extended format string CCYY-MM-DD. Example 2002-12-31 /*!\ingroup date_format */ inline std::string to_iso_extended_string(const date& d) { return date_time::date_formatter >::date_to_string(d); } - //! Convert to iso standard string YYYYMMDD. Example: 20021231 + //! Convert to ISO 8601 standard string YYYYMMDD. Example: 20021231 /*!\ingroup date_format */ inline std::string to_iso_string(const date& d) { diff --git a/include/boost/date_time/gregorian/greg_date.hpp b/include/boost/date_time/gregorian/greg_date.hpp index c7bcc964c..e9b80c76b 100644 --- a/include/boost/date_time/gregorian/greg_date.hpp +++ b/include/boost/date_time/gregorian/greg_date.hpp @@ -74,18 +74,8 @@ namespace gregorian { {} //! Constructor for infinities, not a date, max and min date BOOST_CXX14_CONSTEXPR explicit date(special_values sv): - date_time::date(date_rep_type::from_special(sv)) - { - if (sv == min_date_time) - { - *this = date(1400, 1, 1); - } - if (sv == max_date_time) - { - *this = date(9999, 12, 31); - } - - } + date_time::date(from_special_adjusted(sv)) + {} //!Return the Julian Day number for the date. BOOST_CXX14_CONSTEXPR date_int_type julian_day() const { @@ -105,7 +95,7 @@ namespace gregorian { ymd_type ymd = year_month_day(); return gregorian_calendar::modjulian_day_number(ymd); } - //!Return the iso 8601 week number 1..53 + //!Return the ISO 8601 week number 1..53 BOOST_CXX14_CONSTEXPR int week_number() const { ymd_type ymd = year_month_day(); @@ -129,6 +119,15 @@ namespace gregorian { private: + BOOST_CXX14_CONSTEXPR date_rep_type from_special_adjusted(special_values sv) + { + switch (sv) + { + case min_date_time: return gregorian_calendar::day_number(ymd_type(1400, 1, 1)); + case max_date_time: return gregorian_calendar::day_number(ymd_type(9999, 12, 31)); + default: return date_rep_type::from_special(sv); + } + } }; inline BOOST_CXX14_CONSTEXPR diff --git a/include/boost/date_time/gregorian/parsers.hpp b/include/boost/date_time/gregorian/parsers.hpp index 48274f649..d603b6aca 100644 --- a/include/boost/date_time/gregorian/parsers.hpp +++ b/include/boost/date_time/gregorian/parsers.hpp @@ -64,12 +64,12 @@ namespace gregorian { return date_time::parse_date(s, date_time::ymd_order_dmy); } - //! From iso type date string where with order year-month-day eg: 20020125 + //! From ISO 8601 type date string where with order year-month-day eg: 20020125 inline date from_undelimited_string(const std::string& s) { return date_time::parse_undelimited_date(s); } - //! From iso type date string where with order year-month-day eg: 20020125 + //! From ISO 8601 type date string where with order year-month-day eg: 20020125 inline date date_from_iso_string(const std::string& s) { return date_time::parse_undelimited_date(s); } diff --git a/include/boost/date_time/gregorian_calendar.ipp b/include/boost/date_time/gregorian_calendar.ipp index f41c4993f..20d4e700d 100644 --- a/include/boost/date_time/gregorian_calendar.ipp +++ b/include/boost/date_time/gregorian_calendar.ipp @@ -25,8 +25,8 @@ namespace date_time { return d; } - //!Return the iso week number for the date - /*!Implements the rules associated with the iso 8601 week number. + //!Return the ISO 8601 week number for the date + /*!Implements the rules associated with the ISO 8601 week number. Basically the rule is that Week 1 of the year is the week that contains January 4th or the week that contains the first Thursday in January. Reference for this algorithm is the Calendar FAQ by Claus Tondering, April 2000. @@ -77,7 +77,7 @@ namespace date_time { unsigned short a = static_cast((14-ymd.month)/12); unsigned short y = static_cast(ymd.year + 4800 - a); unsigned short m = static_cast(ymd.month + 12*a - 3); - unsigned long d = ymd.day + ((153*m + 2)/5) + 365*y + (y/4) - (y/100) + (y/400) - 32045; + unsigned long d = static_cast(ymd.day) + ((153*m + 2)/5) + 365*y + (y/4) - (y/100) + (y/400) - 32045; return static_cast(d); } diff --git a/include/boost/date_time/iso_format.hpp b/include/boost/date_time/iso_format.hpp index 2e7942d8b..9942a223f 100644 --- a/include/boost/date_time/iso_format.hpp +++ b/include/boost/date_time/iso_format.hpp @@ -14,11 +14,11 @@ namespace boost { namespace date_time { -//! Class to provide common iso formatting spec +//! Class to provide common ISO 8601 formatting spec template class iso_format_base { public: - //! Describe month format -- its an integer in iso format + //! Describe month format -- its an integer in ISO 8601 format static month_format_spec month_format() { return month_as_integer; @@ -40,17 +40,17 @@ class iso_format_base { return "-infinity"; } - //! ISO char for a year -- used in durations + //! ISO 8601 char for a year -- used in durations static charT year_sep_char() { return 'Y'; } - //! ISO char for a month + //! ISO 8601 char for a month static charT month_sep_char() { return '-'; } - //! ISO char for a day + //! ISO 8601 char for a day static charT day_sep_char() { return '-'; @@ -70,7 +70,7 @@ class iso_format_base { { return ':'; } - //! ISO char for a period + //! ISO 8601 char for a period static charT period_start_char() { return 'P'; @@ -143,11 +143,11 @@ class iso_format_base { #ifndef BOOST_NO_STD_WSTRING -//! Class to provide common iso formatting spec +//! Class to provide common ISO 8601 formatting spec template<> class iso_format_base { public: - //! Describe month format -- its an integer in iso format + //! Describe month format -- its an integer in ISO 8601 format static month_format_spec month_format() { return month_as_integer; @@ -169,17 +169,17 @@ class iso_format_base { return L"-infinity"; } - //! ISO char for a year -- used in durations + //! ISO 8601 char for a year -- used in durations static wchar_t year_sep_char() { return 'Y'; } - //! ISO char for a month + //! ISO 8601 char for a month static wchar_t month_sep_char() { return '-'; } - //! ISO char for a day + //! ISO 8601 char for a day static wchar_t day_sep_char() { return '-'; @@ -199,7 +199,7 @@ class iso_format_base { { return ':'; } - //! ISO char for a period + //! ISO 8601 char for a period static wchar_t period_start_char() { return 'P'; @@ -272,7 +272,7 @@ class iso_format_base { #endif // BOOST_NO_STD_WSTRING -//! Format description for iso normal YYYYMMDD +//! Format description for ISO 8601 normal YYYYMMDD template class iso_format : public iso_format_base { public: diff --git a/include/boost/date_time/local_time/local_date_time.hpp b/include/boost/date_time/local_time/local_date_time.hpp index e88a231b5..ab8852d19 100644 --- a/include/boost/date_time/local_time/local_date_time.hpp +++ b/include/boost/date_time/local_time/local_date_time.hpp @@ -315,7 +315,7 @@ namespace local_time { //! Returns name of associated time zone or "Coordinated Universal Time". /*! Optional bool parameter will return time zone as an offset - * (ie "+07:00" extended iso format). Empty string is returned for + * (ie "+07:00" extended ISO 8601 format). Empty string is returned for * classes that do not use a time_zone */ std::string zone_name(bool as_offset=false) const { @@ -349,7 +349,7 @@ namespace local_time { } //! Returns abbreviation of associated time zone or "UTC". /*! Optional bool parameter will return time zone as an offset - * (ie "+0700" iso format). Empty string is returned for classes + * (ie "+0700" ISO 8601 format). Empty string is returned for classes * that do not use a time_zone */ std::string zone_abbrev(bool as_offset=false) const { diff --git a/include/boost/date_time/posix_time/conversion.hpp b/include/boost/date_time/posix_time/conversion.hpp index cdff4b76f..d0945444a 100644 --- a/include/boost/date_time/posix_time/conversion.hpp +++ b/include/boost/date_time/posix_time/conversion.hpp @@ -26,7 +26,7 @@ namespace posix_time { inline ptime from_time_t(std::time_t t) { - return ptime(gregorian::date(1970,1,1)) + seconds(static_cast(t)); + return ptime(gregorian::date(1970,1,1)) + seconds(t); } //! Function that converts a ptime into a time_t diff --git a/include/boost/date_time/posix_time/posix_time_io.hpp b/include/boost/date_time/posix_time/posix_time_io.hpp index 90b02a691..6a72e3278 100644 --- a/include/boost/date_time/posix_time/posix_time_io.hpp +++ b/include/boost/date_time/posix_time/posix_time_io.hpp @@ -97,7 +97,7 @@ namespace posix_time { throw; // rethrow original exception } else { - // if the user want's to fail quietly, we simply set the failbit + // if the user wants to fail quietly, we simply set the failbit is.setstate(std::ios_base::failbit); } } diff --git a/include/boost/date_time/posix_time/time_formatters.hpp b/include/boost/date_time/posix_time/time_formatters.hpp index ce1956822..e9122db2f 100644 --- a/include/boost/date_time/posix_time/time_formatters.hpp +++ b/include/boost/date_time/posix_time/time_formatters.hpp @@ -157,7 +157,7 @@ namespace posix_time { }// else return ss.str(); } - //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456 + //! Time duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456 /*!\ingroup time_format */ inline std::string to_iso_string(time_duration td){ @@ -215,7 +215,7 @@ namespace posix_time { return ts; } } - //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator + //! Convert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator /*!\ingroup time_format */ inline std::string to_iso_string(ptime t){ @@ -251,7 +251,7 @@ namespace posix_time { inline std::wstring to_simple_wstring(time_duration td) { return to_simple_string_type(td); } - //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456 + //! Time duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456 /*!\ingroup time_format */ inline std::wstring to_iso_wstring(time_duration td){ @@ -266,7 +266,7 @@ namespace posix_time { inline std::wstring to_simple_wstring(time_period tp){ return to_simple_string_type(tp); } - //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator + //! Convert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator /*!\ingroup time_format */ inline std::wstring to_iso_wstring(ptime t){ diff --git a/include/boost/date_time/posix_time/time_formatters_limited.hpp b/include/boost/date_time/posix_time/time_formatters_limited.hpp index c74fcfa0b..a5e5f71b0 100644 --- a/include/boost/date_time/posix_time/time_formatters_limited.hpp +++ b/include/boost/date_time/posix_time/time_formatters_limited.hpp @@ -82,7 +82,7 @@ namespace posix_time { return ss.str(); } - //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456 + //! Time duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456 /*!\ingroup time_format */ inline @@ -173,7 +173,7 @@ namespace posix_time { return std::string("[" + d1 + "/" + d2 +"]"); } - //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator + //! Convert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator /*!\ingroup time_format */ inline diff --git a/include/boost/date_time/special_values_parser.hpp b/include/boost/date_time/special_values_parser.hpp index d436d924c..7b493c894 100644 --- a/include/boost/date_time/special_values_parser.hpp +++ b/include/boost/date_time/special_values_parser.hpp @@ -97,7 +97,7 @@ namespace boost { namespace date_time { //! match() should be called and return value checked. //! \param[in] str the string to check //! \returns false if it is definitely not a special value - static bool likely(const string_type& str) + static bool should_call_match(const string_type& str) { if (!str.empty()) { switch (str[0]) { diff --git a/include/boost/date_time/time_facet.hpp b/include/boost/date_time/time_facet.hpp index eaa365913..98c133ae1 100644 --- a/include/boost/date_time/time_facet.hpp +++ b/include/boost/date_time/time_facet.hpp @@ -481,7 +481,7 @@ namespace date_time { boost::algorithm::replace_all(format, unrestricted_hours_format, hours_str); } // We still have to process restricted hours format specifier. In order to - // support parseability of durations in ISO format (%H%M%S), we'll have to + // support parseability of durations in ISO 8601 format (%H%M%S), we'll have to // restrict the stringified hours length to 2 characters. if (format.find(hours_format) != string_type::npos) { if (hours_str.empty()) diff --git a/include/boost/date_time/time_parsing.hpp b/include/boost/date_time/time_parsing.hpp index 04482736c..98bedbf07 100644 --- a/include/boost/date_time/time_parsing.hpp +++ b/include/boost/date_time/time_parsing.hpp @@ -183,7 +183,7 @@ namespace date_time { } - //! Parse time duration part of an iso time of form: [-]hhmmss[.fff...] (eg: 120259.123 is 12 hours, 2 min, 59 seconds, 123000 microseconds) + //! Parse time duration part of an ISO 8601 time of form: [-]hhmmss[.fff...] (eg: 120259.123 is 12 hours, 2 min, 59 seconds, 123000 microseconds) template inline time_duration @@ -309,7 +309,7 @@ namespace date_time { // then from_iso_string should be able to read a special value string // the special_values_parser is expensive to set up and not thread-safe // so it cannot be static, so we need to be careful about when we use it - if (svp_type::likely(s)) { + if (svp_type::should_call_match(s)) { typedef typename svp_type::stringstream_type ss_type; typedef typename svp_type::stream_itr_type itr_type; typedef typename svp_type::match_results mr_type; diff --git a/test/posix_time/testmicrosec_time_clock.cpp b/test/posix_time/testmicrosec_time_clock.cpp index 8f0553ab3..a6bb4d987 100644 --- a/test/posix_time/testmicrosec_time_clock.cpp +++ b/test/posix_time/testmicrosec_time_clock.cpp @@ -48,7 +48,7 @@ main() std::cout << "Check local time of microsec_clock against second_clock" << std::endl; ptime last = microsec_clock::local_time(); - int max = 30; + int max = 5; for (int i=0; i= 8) + { + std::time_t tt4(INT64_C(11864480887)); + t18 = from_time_t(tt4); //2345-12-21 09:08:07 + check("time_t conversion of 11864480887", + t18 == ptime(date(2345,12,21), time_duration(9,8,7))); + check("time_t conversion from 11864480887", to_time_t(t18) == tt4); + } +#endif + special_values_tests(); //min and max constructors diff --git a/xmldoc/date_class.xml b/xmldoc/date_class.xml index 3a1dda74f..196acb265 100644 --- a/xmldoc/date_class.xml +++ b/xmldoc/date_class.xml @@ -132,7 +132,7 @@ date d(from_string(ds)); date from_undelimited_string(std::string) - From iso type date string where with order year-month-day eg: 20020125 + From ISO 8601 type date string where with order year-month-day eg: 20020125 std::string ds("20020125"); diff --git a/xmldoc/ex_localization.xml b/xmldoc/ex_localization.xml index 2fb872e18..017dd8742 100644 --- a/xmldoc/ex_localization.xml +++ b/xmldoc/ex_localization.xml @@ -103,7 +103,7 @@ us_facet->format("%m/%d/%Y"); std::cout << d1 << std::endl; // 10/01/2002 - // English names, iso order (year-month-day), '-' separator + // English names, ISO 8601 order (year-month-day), '-' separator us_facet->format("%Y-%b-%d"); std::cout << d1 << std::endl; // 2002-Oct-01 diff --git a/xmldoc/local_time_period.xml b/xmldoc/local_time_period.xml index 2ea8f74c9..36b8a9e59 100644 --- a/xmldoc/local_time_period.xml +++ b/xmldoc/local_time_period.xml @@ -328,7 +328,7 @@ mar_mst.shift(hours(48)); false std::string to_simple_string(ptime) - To YYYY-mmm-DD HH:MM:SS.fffffffff string where mmm 3 char month name. Fractional seconds only included if non-zero. + To YYYY-mmm-DD HH:MM:SS.fffffffff string where mmm 3 char month name and the fractional seconds are only included if non-zero. 2002-Jan-01 10:00:01.123456789 @@ -353,18 +353,18 @@ pt3.is_special(); // --> false std::string to_iso_string(ptime) - Convert to form YYYYMMDDTHHMMSS,fffffffff where T is the date-time separator + Convert to form YYYYMMDDTHHMMSS.fffffffff where T is the date-time separator and the fractional seconds are only included if non-zero. - 20020131T100001,123456789 + 20020131T100001.123456789 std::string to_iso_extended_string(ptime) - Convert to form YYYY-MM-DDTHH:MM:SS,fffffffff where T is the date-time separator + Convert to form YYYY-MM-DDTHH:MM:SS.fffffffff where T is the date-time separator and the fractional seconds are only included if non-zero. - 2002-01-31T10:00:01,123456789 + 2002-01-31T10:00:01.123456789 diff --git a/xmldoc/time_duration.xml b/xmldoc/time_duration.xml index 87be987f9..61073ded2 100644 --- a/xmldoc/time_duration.xml +++ b/xmldoc/time_duration.xml @@ -479,7 +479,7 @@ td3.is_special(); // --> false std::string to_simple_string(time_duration) - To HH:MM:SS.fffffffff were fff is fractional seconds that are only included if non-zero. + To HH:MM:SS.fffffffff where fffffffff is fractional seconds that are only included if non-zero. 10:00:01.123456789 @@ -487,10 +487,10 @@ td3.is_special(); // --> false std::string to_iso_string(time_duration) - Convert to form HHMMSS,fffffffff. + Convert to form HHMMSS.fffffffff where the fractional seconds are only included if non-zero. - 100001,123456789 + 100001.123456789 diff --git a/xmldoc/time_period.xml b/xmldoc/time_period.xml index ba451aabd..7553cac42 100644 --- a/xmldoc/time_period.xml +++ b/xmldoc/time_period.xml @@ -191,7 +191,7 @@ tp.last();// --> 2002-Jan-01 09:59:59.999999999 ptime t1(d, seconds(10)); //10 sec after midnight ptime t2(d, hours(10)); //10 hours after midnight time_period tp(t1, t2); -tp.last(); // --> 2002-Jan-01 10:00:00 +tp.end(); // --> 2002-Jan-01 10:00:00 @@ -311,7 +311,7 @@ tp2.intersects(tp1); // --> true std::string to_simple_string(time_period dp) - To [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name. + To [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name and the fractional seconds are only included if non-zero. [2002-Jan-01 01:25:10.000000001/ @@ -341,7 +341,7 @@ tp2.intersects(tp1); // --> true operator<< - Output streaming operator for time duration. Uses facet to output [date time_of_day/date time_of_day]. The default is format is [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name and the fractional seconds are left out when zero. + Output streaming operator for time duration. Uses facet to output [date time_of_day/date time_of_day]. The default is format is [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name and the fractional seconds are only included if non-zero. [2002-Jan-01 01:25:10.000000001/ \ @@ -350,7 +350,7 @@ tp2.intersects(tp1); // --> true operator>> - Input streaming operator for time duration. Uses facet to read [date time_of_day/date time_of_day]. The default is format is [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name and the fractional seconds are left out when zero. + Input streaming operator for time duration. Uses facet to read [date time_of_day/date time_of_day]. The default is format is [YYYY-mmm-DD hh:mm:ss.fffffffff/YYYY-mmm-DD hh:mm:ss.fffffffff] string where mmm is 3 char month name and the fractional seconds are only included if non-zero. [2002-Jan-01 01:25:10.000000001/ \