diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d81c737..b544d4c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: GitHub Actions CI +name: CI on: pull_request: @@ -6,10 +6,10 @@ on: branches: - master - develop - - githubactions* - feature/** - - fix/** - - pr/** + +env: + UBSAN_OPTIONS: print_stacktrace=1 jobs: posix: @@ -17,175 +17,174 @@ jobs: fail-fast: false matrix: include: - - name: "GCC-8" - buildtype: "boost" - packages: "g++-8" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_args: "cxxstd=98,03,11,14,1z toolset=gcc-8 cxxflags=\"--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage -lasan -lubsan\" \"testing.launcher=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.5\"" - gcovtool: "gcov-8" - - name: "GCC-4.6" - buildtype: "boost" - packages: "g++-4.6" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++" - sources: "" - llvm_os: "" - llvm_ver: "" - b2_args: "cxxstd=98,0x toolset=gcc-4.6 cxxflags=\"--coverage -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage\"" - gcovtool: "gcov-4.6" - - name: "Clang-8" - buildtype: "boost" - packages: "clang-8 g++" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++" - sources: "" - llvm_os: "xenial" - llvm_ver: "8" - b2_args: "cxxstd=98,03,11,14,1z toolset=clang-8 cxxflags=\"--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD\" linkflags=\"--coverage -fsanitize=address,leak,undefined\"" - gcovtool: "gcov_for_clang.sh" - - name: "Clang-8 libc++" - buildtype: "boost" - packages: "clang-8 libc++-8-dev libc++abi-8-dev" - packages_to_remove: "" - os: "ubuntu-16.04" - cxx: "g++" - sources: "" - llvm_os: "xenial" - llvm_ver: "8" - b2_args: "cxxstd=03,11,14 toolset=clang-8 cxxflags=\"-stdlib=libc++ --coverage -DBOOST_TRAVISCI_BUILD\" linkflags=\"-stdlib=libc++ --coverage\"" - gcovtool: "gcov_for_clang.sh" + - toolset: gcc-4.8 + cxxstd: "03,11" + os: ubuntu-16.04 + install: g++-4.8 + - toolset: gcc-7 + cxxstd: "03,11,14,17" + os: ubuntu-18.04 + - toolset: gcc-9 + cxxstd: "03,11,14,17,2a" + os: ubuntu-18.04 + - toolset: gcc-10 + cxxstd: "03,11,14,17,2a" + os: ubuntu-18.04 + cxxflags: "cxxflags=--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined" + linkflags: "linkflags=--coverage -lasan -lubsan" + gcov_tool: "gcov-10" + - toolset: clang + compiler: clang++-3.7 + cxxstd: "03,11,14" + os: ubuntu-16.04 + install: clang-3.7 + - toolset: clang + compiler: clang++-9 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + cxxflags: "cxxflags=--coverage" + linkflags: "linkflags=--coverage" + gcov_tool: "llvm-cov-9 gcov" + - toolset: clang + compiler: clang++-10 + cxxstd: "03,11,14,17,2a" + os: ubuntu-20.04 + - toolset: clang + cxxstd: "03,11,14,17,2a" + os: macos-10.15 + cxxflags: "cxxflags=-fsanitize=address,undefined -fno-sanitize-recover=undefined" + linkflags: "linkflags=-fsanitize=address,undefined" - runs-on: ${{ matrix.os }} - container: ${{ matrix.container }} + runs-on: ${{matrix.os}} 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 }} - B2_ARGS: ${{ matrix.b2_args }} - GCOVTOOL: ${{ matrix.gcovtool }} - TRAVIS_BRANCH: ${{ github.base_ref }} - TRAVIS_OS_NAME: "linux" + - name: Install packages + if: matrix.install + run: sudo apt install ${{matrix.install}} + + - name: Setup Boost run: | - echo '==================================> SETUP' - echo '==================================> PACKAGES' - sudo ln -s /usr/bin/llvm-cov-9 /usr/bin/llvm-cov - 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 - IGNORE_COVERAGE='' - BOOST_LIBS_FOLDER=$(basename $REPO_NAME) - UBSAN_OPTIONS=print_stacktrace=1 - LSAN_OPTIONS=verbosity=1:log_threads=1 - BOOST=$HOME/boost-local - git clone -b $BOOST_BRANCH --depth 10 https://github.com/boostorg/boost.git $BOOST - cd $BOOST - git submodule update --init --depth 10 --jobs 2 tools/build tools/boostdep tools/inspect libs/filesystem - python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" $BOOST/libs/filesystem - echo "Testing $BOOST/libs/$BOOST_LIBS_FOLDER moved from $TRAVIS_BUILD_DIR, branch $BOOST_BRANCH" - rm -rf $BOOST/libs/$BOOST_LIBS_FOLDER || true - cp -rp $TRAVIS_BUILD_DIR $BOOST/libs/$BOOST_LIBS_FOLDER - python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 2" $BOOST_LIBS_FOLDER - git status + echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY + LIBRARY=${GITHUB_REPOSITORY#*/} + echo LIBRARY: $LIBRARY + echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV + echo GITHUB_BASE_REF: $GITHUB_BASE_REF + echo GITHUB_REF: $GITHUB_REF + REF=${GITHUB_BASE_REF:-$GITHUB_REF} + REF=${REF#refs/heads/} + echo REF: $REF + BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true + echo BOOST_BRANCH: $BOOST_BRANCH + cd .. + git clone -b $BOOST_BRANCH --depth 10 https://github.com/boostorg/boost.git boost-root + cd boost-root + git submodule update --init --depth 10 --jobs 2 tools/boostdep tools/inspect libs/filesystem + python tools/boostdep/depinst/depinst.py --git_args "--depth 10 --jobs 3" filesystem + rm -rf libs/$LIBRARY/* + cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY + python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools --git_args "--depth 10 --jobs 3" $LIBRARY ./bootstrap.sh - ./b2 headers + ./b2 -d0 headers ./b2 -j4 variant=debug tools/inspect/build - echo "using gcc ;" >> ~/user-config.jam - echo "using clang ;" >> ~/user-config.jam - echo "using clang : 3.8 : clang++-3.8 ;" >> ~/user-config.jam - echo "using clang : 4 : clang++-4.0 ;" >> ~/user-config.jam - echo "using clang : 5 : clang++-5.0 ;" >> ~/user-config.jam - echo "using clang : 6 : clang++-6.0 ;" >> ~/user-config.jam - echo "using clang : 7 : clang++-7.0 ;" >> ~/user-config.jam - echo "using clang : 8 : clang++-8 ;" >> ~/user-config.jam - echo "using clang : libc++ : clang++-libc++ ;" >> ~/user-config.jam - cd $BOOST/libs/$BOOST_LIBS_FOLDER/test/ - echo '==================================> SCRIPT' + - name: Create user-config.jam + if: matrix.compiler + run: | + echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam - sh -c "../../../b2 -j2 $B2_ARGS" - ../../../dist/bin/inspect .. -license -copyright -crlf -end -path_name -tab -ascii -apple_macro -deprecated_macro -minmax -unnamed + - name: Run tests + run: | + cd ../boost-root + ./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release "${{matrix.cxxflags}}" "${{matrix.linkflags}}" "${{matrix.launcher}}" + dist/bin/inspect libs/$LIBRARY - echo '==================================> AFTER_SUCCESS' + - name: Prepare coverage data + if: matrix.gcov_tool + run: | + mkdir -p $GITHUB_WORKSPACE/coveralls - mkdir -p $TRAVIS_BUILD_DIR/coverals - find ../../../bin.v2/ -name "*.gcda" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - find ../../../bin.v2/ -name "*.gcno" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - find ../../../bin.v2/ -name "*.da" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - find ../../../bin.v2/ -name "*.no" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - wget https://github.com/linux-test-project/lcov/archive/v1.14.zip - unzip v1.14.zip - LCOV="`pwd`/lcov-1.14/bin/lcov --gcov-tool $GCOVTOOL" - mkdir -p ~/.local/bin - echo -e '#!/bin/bash\nexec llvm-cov gcov "$@"' > ~/.local/bin/gcov_for_clang.sh - chmod 755 ~/.local/bin/gcov_for_clang.sh - echo "$LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info" - $LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info - cd $BOOST - $LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info "/usr*" "*/$BOOST_LIBS_FOLDER/test/*" $IGNORE_COVERAGE "*/$BOOST_LIBS_FOLDER/tests/*" "*/$BOOST_LIBS_FOLDER/examples/*" "*/$BOOST_LIBS_FOLDER/example/*" -o $TRAVIS_BUILD_DIR/coverals/coverage.info - OTHER_LIBS=`grep "submodule .*" .gitmodules | sed 's/\[submodule\ "\(.*\)"\]/"\*\/boost\/\1\.hpp" "\*\/boost\/\1\/\*"/g'| sed "/\"\*\/boost\/$BOOST_LIBS_FOLDER\/\*\"/d" | sed ':a;N;$!ba;s/\n/ /g'` + echo -e "#!/bin/bash\nexec ${{matrix.gcov_tool}} \"\$@\"" > $GITHUB_WORKSPACE/coveralls/gcov_wrapper.sh + chmod +x $GITHUB_WORKSPACE/coveralls/gcov_wrapper.sh + wget https://github.com/linux-test-project/lcov/archive/v1.15.zip + unzip v1.15.zip + LCOV="`pwd`/lcov-1.15/bin/lcov --gcov-tool $GITHUB_WORKSPACE/coveralls/gcov_wrapper.sh" + + echo "$LCOV --directory ../boost-root/bin.v2/libs/$LIBRARY/ --base-directory `pwd`/libs/$LIBRARY/test --capture --output-file $GITHUB_WORKSPACE/coveralls/coverage.info" + $LCOV --directory ../boost-root/bin.v2/libs/$LIBRARY/ --base-directory ../boost-root/ --capture --output-file $GITHUB_WORKSPACE/coveralls/coverage.info + $LCOV --remove $GITHUB_WORKSPACE/coveralls/coverage.info "/usr*" "*/$LIBRARY/test/*" ${{matrix.ignore_coverage}} "*/$LIBRARY/tests/*" "*/$LIBRARY/examples/*" "*/$LIBRARY/example/*" -o $GITHUB_WORKSPACE/coveralls/coverage.info + + cd ../boost-root + OTHER_LIBS=`grep "submodule .*" .gitmodules | sed 's/\[submodule\ "\(.*\)"\]/"\*\/boost\/\1\.hpp" "\*\/boost\/\1\/\*"/g'| sed "/\"\*\/boost\/$LIBRARY\/\*\"/d" | sed ':a;N;$!ba;s/\n/ /g'` echo $OTHER_LIBS - eval "$LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info $OTHER_LIBS -o $TRAVIS_BUILD_DIR/coverals/coverage.info" - cd $TRAVIS_BUILD_DIR - sudo gem install coveralls-lcov || echo "ERROR. Failed to install coveralls-lcov" - coveralls-lcov coverals/coverage.info + eval "$LCOV --remove $GITHUB_WORKSPACE/coveralls/coverage.info $OTHER_LIBS -o $GITHUB_WORKSPACE/coveralls/coverage.info" - fi + - name: Coveralls + uses: coverallsapp/github-action@master + if: matrix.gcov_tool + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + path-to-lcov: ./coveralls/coverage.info + parallel: true + + windows: + strategy: + fail-fast: false + matrix: + include: + - toolset: msvc-14.1 + cxxstd: "14,17,latest" + addrmd: 32,64 + os: windows-2016 + - toolset: msvc-14.2 + cxxstd: "14,17,latest" + addrmd: 32,64 + os: windows-2019 + - toolset: gcc + cxxstd: "03,11,14,17,2a" + addrmd: 64 + os: windows-2019 + + runs-on: ${{matrix.os}} + + steps: + - uses: actions/checkout@v2 + + - name: Setup Boost + shell: cmd + run: | + echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY% + for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi + echo LIBRARY: %LIBRARY% + echo LIBRARY=%LIBRARY%>>%GITHUB_ENV% + echo GITHUB_BASE_REF: %GITHUB_BASE_REF% + echo GITHUB_REF: %GITHUB_REF% + if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF% + set BOOST_BRANCH=develop + for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master + echo BOOST_BRANCH: %BOOST_BRANCH% + cd .. + git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root + cd boost-root + xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\ + git submodule update --init tools/boostdep + python tools/boostdep/depinst/depinst.py --include benchmark --include example --include examples --include tools --git_args "--jobs 3" %LIBRARY% + cmd /c bootstrap + b2 -d0 headers + + - name: Run tests + shell: cmd + run: | + cd ../boost-root + b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release + + finish: + needs: posix + runs-on: ubuntu-latest + steps: + - name: Coveralls Finished + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true diff --git a/.travis.yml b/.travis.yml index 07e39bd..470d29d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -111,26 +111,21 @@ before_install: script: - sh -c "../../../b2 -j2 $B2_ARGS" - # inspect tool run without -link and -assert_macro checks - - ../../../dist/bin/inspect .. -license -copyright -crlf -end -path_name -tab -ascii -apple_macro -deprecated_macro -minmax -unnamed + - ../../../dist/bin/inspect .. after_success: # Copying Coveralls data to a separate folder - mkdir -p $TRAVIS_BUILD_DIR/coverals - - find ../../../bin.v2/ -name "*.gcda" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - - find ../../../bin.v2/ -name "*.gcno" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - - find ../../../bin.v2/ -name "*.da" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - - find ../../../bin.v2/ -name "*.no" -exec cp "{}" $TRAVIS_BUILD_DIR/coverals/ \; - - wget https://github.com/linux-test-project/lcov/archive/v1.14.zip - - unzip v1.14.zip - - LCOV="`pwd`/lcov-1.14/bin/lcov --gcov-tool $GCOVTOOL" + - wget https://github.com/linux-test-project/lcov/archive/v1.15.zip + - unzip v1.15.zip + - LCOV="`pwd`/lcov-1.15/bin/lcov --gcov-tool $GCOVTOOL" - mkdir -p ~/.local/bin - echo -e '#!/bin/bash\nexec llvm-cov gcov "$@"' > ~/.local/bin/gcov_for_clang.sh - chmod 755 ~/.local/bin/gcov_for_clang.sh # Preparing Coveralls data by changind data format to a readable one - - echo "$LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info" - - $LCOV --directory $TRAVIS_BUILD_DIR/coverals --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info + - echo "$LCOV --directory $BOOST/bin.v2/libs/$BOOST_LIBS_FOLDER --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info" + - $LCOV --directory $BOOST/bin.v2/libs/$BOOST_LIBS_FOLDER --base-directory `pwd` --capture --output-file $TRAVIS_BUILD_DIR/coverals/coverage.info # ... erasing /test/ /example/ folder data - cd $BOOST diff --git a/examples/exact_types_match.cpp b/examples/exact_types_match.cpp index 05eaa7a..5342e9a 100644 --- a/examples/exact_types_match.cpp +++ b/examples/exact_types_match.cpp @@ -23,6 +23,8 @@ // Making `#include ` visible in docs, while actually using hand-made check // instead of `assert`. This is required to verify correct behavior even if NDEBUG // is defined and to avoid `unused local variable` warnings with defined NDEBUG. +// +// boost-no-inspect #ifdef assert # undef assert #endif diff --git a/examples/registry.cpp b/examples/registry.cpp index d2f3d9f..66a91ac 100644 --- a/examples/registry.cpp +++ b/examples/registry.cpp @@ -16,6 +16,8 @@ // Making `#include ` visible in docs, while actually using `BOOST_TEST` // instead of `assert`. This is required to verify correct behavior even if NDEBUG // is defined and to avoid `unused local variable` warnings with defined NDEBUG. +// +// boost-no-inspect #include #ifdef assert # undef assert diff --git a/examples/user_defined_typeinfo.cpp b/examples/user_defined_typeinfo.cpp index c4d7ac5..170863d 100644 --- a/examples/user_defined_typeinfo.cpp +++ b/examples/user_defined_typeinfo.cpp @@ -18,6 +18,7 @@ #include //] [/type_index_my_type_index_worldwide_macro] +// boost-no-inspect #include #ifdef assert # undef assert