diff --git a/.drone.star b/.drone.star new file mode 100644 index 0000000..e924841 --- /dev/null +++ b/.drone.star @@ -0,0 +1,29 @@ +# 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={} +linuxglobalimage="cppalliance/droneubuntu1604:1" +windowsglobalimage="cppalliance/dronevs2019" + +def main(ctx): + return [ + linux_cxx("TOOLSET=gcc COMPILER=g++ CXXSTD=11 Job 0", "g++", packages="", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++', 'CXXSTD': '11', 'DRONE_JOB_UUID': 'b6589fc6ab'}, globalenv=globalenv), + linux_cxx("TOOLSET=gcc COMPILER=g++-5 CXXSTD=11,14,1z Job 1", "g++-5", packages="g++-5", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-5', 'CXXSTD': '11,14,1z', 'DRONE_JOB_UUID': '356a192b79'}, globalenv=globalenv), + linux_cxx("TOOLSET=gcc COMPILER=g++-6 CXXSTD=11,14,1z Job 2", "g++-6", packages="g++-6", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-6', 'CXXSTD': '11,14,1z', 'DRONE_JOB_UUID': 'da4b9237ba'}, globalenv=globalenv), + linux_cxx("TOOLSET=gcc COMPILER=g++-7 CXXSTD=11,14,17 Job 3", "g++-7", packages="g++-7", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'COMPILER': 'g++-7', 'CXXSTD': '11,14,17', 'DRONE_JOB_UUID': '77de68daec'}, globalenv=globalenv), + linux_cxx("TOOLSET=clang COMPILER=clang++ CXXSTD=11 Job 4", "clang++", packages="", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': '11', 'DRONE_JOB_UUID': '1b64538924'}, globalenv=globalenv), + linux_cxx("TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=11, Job 5", "clang++-4.0", packages="clang-4.0 libstdc++-6-dev", llvm_os="xenial", llvm_ver="4.0", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-4.0', 'CXXSTD': '11,14,1z', 'DRONE_JOB_UUID': 'ac3478d69a'}, globalenv=globalenv), + linux_cxx("TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=11, Job 6", "clang++-5.0", packages="clang-5.0 libstdc++-7-dev", llvm_os="xenial", llvm_ver="5.0", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'COMPILER': 'clang++-5.0', 'CXXSTD': '11,14,1z', 'DRONE_JOB_UUID': 'c1dfd96eea'}, globalenv=globalenv), + osx_cxx("TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1 Job 7", "clang++", packages="", buildtype="boost", buildscript="drone", xcode_version="8.3", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': '11,14,1z', 'DRONE_JOB_UUID': '902ba3cda1'}, globalenv=globalenv), + osx_cxx("TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1 Job 8", "clang++", packages="", buildtype="boost", buildscript="drone", xcode_version="9.1", environment={'TOOLSET': 'clang', 'COMPILER': 'clang++', 'CXXSTD': '11,14,1z', 'DRONE_JOB_UUID': 'fe5dbbcea5'}, 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 new file mode 100755 index 0000000..6024dae --- /dev/null +++ b/.drone/drone.sh @@ -0,0 +1,37 @@ +#!/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 +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' + +BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true +cd .. +git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root +cd boost-root +git submodule update --init tools/build +git submodule update --init libs/config +git submodule update --init tools/boostdep +cp -r $TRAVIS_BUILD_DIR/* libs/coroutine2 +python tools/boostdep/depinst/depinst.py coroutine2 +./bootstrap.sh +./b2 headers + +echo '==================================> SCRIPT' + +echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam +./b2 -j 3 libs/coroutine2/test toolset=$TOOLSET cxxstd=$CXXSTD + +fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..9370fb0 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,293 @@ +name: GitHub Actions CI + +on: + pull_request: + push: + branches: + - master + - develop + - githubactions* + - feature/** + - fix/** + - pr/** + +jobs: + posix: + strategy: + fail-fast: false + matrix: + include: + - name: "TOOLSET=gcc COMPILER=g++ CXXSTD=11 Job 0" + buildtype: "boost" + packages: "" + packages_to_remove: "" + os: "ubuntu-16.04" + cxx: "g++" + sources: "" + llvm_os: "" + llvm_ver: "" + toolset: "gcc" + compiler: "g++" + cxxstd: "11" + - name: "TOOLSET=gcc COMPILER=g++-5 CXXSTD=11,14,1z Job 1" + buildtype: "boost" + packages: "g++-5" + packages_to_remove: "" + os: "ubuntu-16.04" + cxx: "g++-5" + sources: "" + llvm_os: "" + llvm_ver: "" + toolset: "gcc" + compiler: "g++-5" + cxxstd: "11,14,1z" + - name: "TOOLSET=gcc COMPILER=g++-6 CXXSTD=11,14,1z Job 2" + buildtype: "boost" + packages: "g++-6" + packages_to_remove: "" + os: "ubuntu-16.04" + cxx: "g++-6" + sources: "" + llvm_os: "" + llvm_ver: "" + toolset: "gcc" + compiler: "g++-6" + cxxstd: "11,14,1z" + - name: "TOOLSET=gcc COMPILER=g++-7 CXXSTD=11,14,17 Job 3" + buildtype: "boost" + packages: "g++-7" + packages_to_remove: "" + os: "ubuntu-16.04" + cxx: "g++-7" + sources: "" + llvm_os: "" + llvm_ver: "" + toolset: "gcc" + compiler: "g++-7" + cxxstd: "11,14,17" + - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=11 Job 4" + buildtype: "boost" + packages: "" + packages_to_remove: "" + os: "ubuntu-16.04" + cxx: "clang++" + sources: "" + llvm_os: "" + llvm_ver: "" + toolset: "clang" + compiler: "clang++" + cxxstd: "11" + - name: "TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=11, Job 5" + 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" + toolset: "clang" + compiler: "clang++-4.0" + cxxstd: "11,14" + - name: "TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=11, Job 6" + 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" + toolset: "clang" + compiler: "clang++-5.0" + cxxstd: "11,14,1z" + + runs-on: ${{ matrix.os }} + container: ${{ matrix.container }} + + steps: + - name: Check if running in container + if: matrix.container != '' + run: echo "GHA_CONTAINER=${{ matrix.container }}" >> $GITHUB_ENV + + - 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 }} + TOOLSET: ${{ matrix.toolset }} + COMPILER: ${{ matrix.compiler }} + CXXSTD: ${{ matrix.cxxstd }} + TRAVIS_BRANCH: ${{ github.base_ref }} + TRAVIS_OS_NAME: "linux" + run: | + echo '==================================> SETUP' + echo '==================================> PACKAGES' + set -e + if [ -n "$PACKAGES_TO_REMOVE" ]; then sudo apt-get purge -y $PACKAGES_TO_REMOVE; fi + echo ">>>>> APT: REPO.." + for i in {1..3}; do sudo -E apt-add-repository -y "ppa:ubuntu-toolchain-r/test" && break || sleep 2; done + + if test -n "${LLVM_OS}" ; then + wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add - + if test -n "${LLVM_VER}" ; then + sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS}-${LLVM_VER} main" + else + # Snapshot (i.e. trunk) build of clang + sudo -E apt-add-repository "deb http://apt.llvm.org/${LLVM_OS}/ llvm-toolchain-${LLVM_OS} main" + fi + fi + echo ">>>>> APT: UPDATE.." + sudo -E apt-get -o Acquire::Retries=3 update + if test -n "${SOURCES}" ; then + echo ">>>>> APT: INSTALL SOURCES.." + for SOURCE in $SOURCES; do + sudo -E apt-add-repository ppa:$SOURCE + done + fi + echo ">>>>> APT: INSTALL ${PACKAGES}.." + sudo -E DEBIAN_FRONTEND=noninteractive apt-get -o Acquire::Retries=3 -y --no-install-suggests --no-install-recommends install ${PACKAGES} + + echo '==================================> INSTALL AND COMPILE' + set -e + export TRAVIS_BUILD_DIR=$(pwd) + export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} + export VCS_COMMIT_ID=$GITHUB_SHA + export GIT_COMMIT=$GITHUB_SHA + export REPO_NAME=$(basename $GITHUB_REPOSITORY) + export USER=$(whoami) + export CC=${CC:-gcc} + export PATH=~/.local/bin:/usr/local/bin:$PATH + + if [ "$JOB_BUILDTYPE" == "boost" ]; then + + echo '==================================> INSTALL' + + BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true + cd .. + git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root + cd boost-root + git submodule update --init tools/build + git submodule update --init libs/config + git submodule update --init tools/boostdep + cp -r $TRAVIS_BUILD_DIR/* libs/coroutine2 + python tools/boostdep/depinst/depinst.py coroutine2 + ./bootstrap.sh + ./b2 headers + + echo '==================================> SCRIPT' + + echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam + ./b2 -j 3 libs/coroutine2/test toolset=$TOOLSET cxxstd=$CXXSTD + + fi +# +# osx: +# strategy: +# fail-fast: false +# matrix: +# include: +# +# Github Actions only supports certain Xcode versions +# Change (or delete) the Xcode version for this job. +# +# - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1 Job 7" +# buildtype: "boost" +# packages: "" +# os: "macos-10.15" +# cxx: "clang++" +# sources: "" +# llvm_os: "" +# llvm_ver: "" +# xcode_version: "8.3" +# toolset: "clang" +# compiler: "clang++" +# cxxstd: "11,14,1z" +# +# Github Actions only supports certain Xcode versions +# Change (or delete) the Xcode version for this job. +# +# - name: "TOOLSET=clang COMPILER=clang++ CXXSTD=11,14,1 Job 8" +# buildtype: "boost" +# packages: "" +# os: "macos-10.15" +# cxx: "clang++" +# sources: "" +# llvm_os: "" +# llvm_ver: "" +# xcode_version: "9.1" +# toolset: "clang" +# compiler: "clang++" +# cxxstd: "11,14,1z" +# +# +# 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 }} +# TOOLSET: ${{ matrix.toolset }} +# COMPILER: ${{ matrix.compiler }} +# CXXSTD: ${{ matrix.cxxstd }} +# TRAVIS_BRANCH: ${{ github.base_ref }} +# TRAVIS_OS_NAME: "osx" +# run: | +# echo '==================================> SETUP' +# set -e +# sudo mv /Library/Developer/CommandLineTools /Library/Developer/CommandLineTools.bck +# echo '==================================> PACKAGES' +# echo '==================================> INSTALL AND COMPILE' +# set -e +# export TRAVIS_BUILD_DIR=$(pwd) +# export TRAVIS_BRANCH=${TRAVIS_BRANCH:-$(echo $GITHUB_REF | awk 'BEGIN { FS = "/" } ; { print $3 }')} +# export VCS_COMMIT_ID=$GITHUB_SHA +# export GIT_COMMIT=$GITHUB_SHA +# export REPO_NAME=$(basename $GITHUB_REPOSITORY) +# export USER=$(whoami) +# export CC=${CC:-gcc} +# export PATH=~/.local/bin:/usr/local/bin:$PATH +# +# if [ "$JOB_BUILDTYPE" == "boost" ]; then +# +# echo '==================================> INSTALL' +# +# BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true +# cd .. +# git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root +# cd boost-root +# git submodule update --init tools/build +# git submodule update --init libs/config +# git submodule update --init tools/boostdep +# cp -r $TRAVIS_BUILD_DIR/* libs/coroutine2 +# python tools/boostdep/depinst/depinst.py coroutine2 +# ./bootstrap.sh +# ./b2 headers +# +# echo '==================================> SCRIPT' +# +# echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam +# ./b2 -j 3 libs/coroutine2/test toolset=$TOOLSET cxxstd=$CXXSTD +# +# fi diff --git a/example/same_fringe.cpp b/example/same_fringe.cpp index a056105..33feb67 100644 --- a/example/same_fringe.cpp +++ b/example/same_fringe.cpp @@ -97,8 +97,8 @@ int main() { traverse(left_d,out); }); std::cout << "left tree from d:\n"; - std::copy(begin(left_d_reader), - end(left_d_reader), + std::copy(std::begin(left_d_reader), + std::end(left_d_reader), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; @@ -107,8 +107,8 @@ int main() { traverse(right_b,out); }); std::cout << "right tree from b:\n"; - std::copy(begin(right_b_reader), - end(right_b_reader), + std::copy(std::begin(right_b_reader), + std::end(right_b_reader), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; @@ -117,8 +117,8 @@ int main() { traverse(right_x,out); }); std::cout << "right tree from x:\n"; - std::copy(begin(right_x_reader), - end(right_x_reader), + std::copy(std::begin(right_x_reader), + std::end(right_x_reader), std::ostream_iterator(std::cout, " ")); std::cout << std::endl; } @@ -139,9 +139,9 @@ int main() { std::cout << "left tree from d == right tree from b? " << std::boolalpha - << std::equal(begin(left_d_reader), - end(left_d_reader), - begin(right_b_reader)) + << std::equal(std::begin(left_d_reader), + std::end(left_d_reader), + std::begin(right_b_reader)) << std::endl; } } @@ -161,9 +161,9 @@ int main() { std::cout << "left tree from d == right tree from x? " << std::boolalpha - << std::equal(begin(left_d_reader), - end(left_d_reader), - begin(right_x_reader)) + << std::equal(std::begin(left_d_reader), + std::end(left_d_reader), + std::begin(right_x_reader)) << std::endl; } } diff --git a/include/boost/coroutine2/detail/pull_coroutine.hpp b/include/boost/coroutine2/detail/pull_coroutine.hpp index 0bb8ea9..96d10d6 100644 --- a/include/boost/coroutine2/detail/pull_coroutine.hpp +++ b/include/boost/coroutine2/detail/pull_coroutine.hpp @@ -294,6 +294,22 @@ end( pull_coroutine< T > &) { }}} +namespace std { + +template< typename T > +typename boost::coroutines2::detail::pull_coroutine< T >::iterator +begin( boost::coroutines2::detail::pull_coroutine< T > & c) { + return boost::coroutines2::detail::begin( c); +} + +template< typename T > +typename boost::coroutines2::detail::pull_coroutine< T >::iterator +end( boost::coroutines2::detail::pull_coroutine< T > & c) { + return boost::coroutines2::detail::end( c); +} + +} + #ifdef BOOST_HAS_ABI_HEADERS # include BOOST_ABI_SUFFIX #endif diff --git a/meta/libraries.json b/meta/libraries.json index 37c84ae..253c7f0 100644 --- a/meta/libraries.json +++ b/meta/libraries.json @@ -10,5 +10,6 @@ ], "maintainers": [ "Oliver Kowalke " - ] + ], + "cxxstd": "11" } diff --git a/test/test_coroutine.cpp b/test/test_coroutine.cpp index 0a9da6a..d4fbd8b 100644 --- a/test/test_coroutine.cpp +++ b/test/test_coroutine.cpp @@ -518,14 +518,11 @@ void test_exceptions() void test_input_iterator() { { - using std::begin; - using std::end; - std::vector< int > vec; coro::coroutine< int >::pull_type coro( f16); - coro::coroutine< int >::pull_type::iterator e = end( coro); + coro::coroutine< int >::pull_type::iterator e = std::end( coro); for ( - coro::coroutine< int >::pull_type::iterator i = begin( coro); + coro::coroutine< int >::pull_type::iterator i = std::begin( coro); i != e; ++i) { vec.push_back( * i); } BOOST_CHECK_EQUAL( ( std::size_t)5, vec.size() );