diff --git a/.travis.yml b/.travis.yml index 51dc9df..6ac2c88 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,118 +2,140 @@ # subject to the Boost Software License, Version 1.0. (See accompanying # file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) # -# Copyright Antony Polukhin 2014-2016. +# Copyright Antony Polukhin 2014-2018. # # See https://svn.boost.org/trac/boost/wiki/TravisCoverals for description of this file # and how it can be used with Boost libraries. # -# File revision #7 +# File revision #9 sudo: false language: cpp -compiler: - - gcc -# - clang - -os: - - linux +os: linux env: - global: - # Autodetect Boost branch by using the following code: - BRANCH_TO_TEST=$TRAVIS_BRANCH - # or just directly specify it - - BRANCH_TO_TEST=$TRAVIS_BRANCH + global: + # Autodetect Boost branch by using the following code: - BOOST_BRANCH=$TRAVIS_BRANCH + # or just directly specify it + - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true - # Files, which coverage results must be ignored (files from other projects). - # Example: - IGNORE_COVERAGE='*/boost/progress.hpp */filesystem/src/*' - - IGNORE_COVERAGE='*/numeric/conversion/converter_policies.hpp' + # Files, which coverage results must be ignored (files from other projects). + # Example: - IGNORE_COVERAGE='*/boost/progress.hpp */filesystem/src/*' + - IGNORE_COVERAGE='' - # Explicitly remove the following library from Boost. This may be usefull, if you're for example running Travis - # from `Boost.DLL` repo, while Boost already has `dll`. - # - # By default is eaual to - BOOST_REMOVE=$(basename $TRAVIS_BUILD_DIR) - # This will force to use local repo content, instead of the Boost's default. - - BOOST_REMOVE=$(basename $TRAVIS_BUILD_DIR) + # boost-local/libs/ folder to put this library into. This may be useful, if you're for example running Travis + # from `Boost.DLL` repo while Boost already has `dll` and with to replace `dll` with content of`Boost.DLL`. + # + # Otherwise just leave the default value - BOOST_LIBS_FOLDER=$(basename $TRAVIS_BUILD_DIR) + - BOOST_LIBS_FOLDER=$(basename $TRAVIS_BUILD_DIR) - matrix: - # Note that "--coverage -fsanitize=address,leak,undefined -DBOOST_TRAVISCI_BUILD" are added automatically lower in code - - CXX_FLAGS="-std=c++98" LINK_FLAGS="" TOOLSET=gcc-6 - - CXX_FLAGS="-std=c++11" LINK_FLAGS="" TOOLSET=gcc-6 - - CXX_FLAGS="-std=c++1y" LINK_FLAGS="" TOOLSET=gcc-6 - #- CXX_FLAGS="-std=c++11 -stdlib=libc++" LINK_FLAGS="-stdlib=libc++" TOOLSET=clang - #- CXX_FLAGS="-std=c++1y -stdlib=libc++" LINK_FLAGS="-stdlib=libc++" TOOLSET=clang + # Global options for sanitizers + - UBSAN_OPTIONS=print_stacktrace=1 + - LSAN_OPTIONS=verbosity=1:log_threads=1 + +# `--coverage` flags required to generate coverage info for Coveralls +matrix: + include: + - env: 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"' + name: "GCC-8" + sudo: required # Required by leak sanitizer + addons: + apt: + sources: ubuntu-toolchain-r-test + packages: g++-8 + + - env: B2_ARGS='cxxstd=98,0x toolset=gcc-4.6 cxxflags="--coverage -DBOOST_TRAVISCI_BUILD" linkflags="--coverage"' + name: "GCC-4.6" + addons: + apt: + sources: ubuntu-toolchain-r-test + packages: g++-4.6 + + - env: B2_ARGS='cxxstd=98,03,11,14,1z toolset=clang-5 cxxflags="--coverage -fsanitize=address,leak,undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD" linkflags="--coverage -fsanitize=address,leak,undefined"' + name: "Clang-5" + sudo: required # Required by leak sanitizer + addons: + apt: + sources: llvm-toolchain-trusty-5.0 + packages: clang-5.0 + + - env: B2_ARGS='cxxstd=03,11,14 toolset=clang-libc++ cxxflags="--coverage -fsanitize=undefined -fno-sanitize-recover=undefined -DBOOST_TRAVISCI_BUILD" linkflags="--coverage -fsanitize=undefined"' + name: "Clang-3.8, libc++" + sudo: required # Required by leak sanitizer + addons: + apt: + packages: libc++-dev ############################################################################################################### # From this point and below code is same for all the Boost libs ############################################################################################################### - # Installing additional tools addons: apt: - sources: - - ubuntu-toolchain-r-test - - git-core + sources: git-core packages: - git - python-yaml - - gcc-6 - - g++-6 - - clang - - libc++-dev before_install: - # Set this to the name of the library - - PROJECT_TO_TEST=`basename $TRAVIS_BUILD_DIR` - # Cloning Boost libraries (fast nondeep cloning) - - BOOST=$HOME/boost-local - - echo "Testing $PROJECT_TO_TEST, to remove $BOOST/libs/$BOOST_REMOVE, testing branch $BRANCH_TO_TEST" - - git init $BOOST - - cd $BOOST - - git remote add --no-tags -t $BRANCH_TO_TEST origin https://github.com/boostorg/boost.git - - git fetch --depth=1 - - git checkout $BRANCH_TO_TEST - - git submodule update --jobs=3 --init --merge - - git remote set-branches --add origin $BRANCH_TO_TEST - - git pull --recurse-submodules - - git status - - rm -rf $BOOST/libs/$BOOST_REMOVE - - mv $TRAVIS_BUILD_DIR $BOOST/libs/$PROJECT_TO_TEST - - TRAVIS_BUILD_DIR=$BOOST/libs/$PROJECT_TO_TEST - - ./bootstrap.sh - - ./b2 headers - - cd $BOOST/libs/$PROJECT_TO_TEST/test/ + # Cloning minimal set of Boost libraries + - BOOST=$HOME/boost-local + - git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git $BOOST + - cd $BOOST + - git submodule update --init --depth 1 tools/build tools/boostdep + + # Replacing Boost module with this project and installing Boost dependencies + - echo "Testing $BOOST/libs/$BOOST_LIBS_FOLDER moved from $TRAVIS_BUILD_DIR, branch $BOOST_BRANCH" + - rm -rf $BOOST/libs/$BOOST_LIBS_FOLDER || true + - mv $TRAVIS_BUILD_DIR $BOOST/libs/$BOOST_LIBS_FOLDER + - python tools/boostdep/depinst/depinst.py --git_args "--depth 1 --jobs 2" $BOOST_LIBS_FOLDER + - git status + + # Adding missing toolsets and preparing Boost headers + - ./bootstrap.sh + - ./b2 headers + - |- + 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.0 ;" >> ~/user-config.jam + echo "using clang : libc++ : clang++-libc++ ;" >> ~/user-config.jam + - cd $BOOST/libs/$BOOST_LIBS_FOLDER/test/ script: - # `--coverage` flags required to generate coverage info for Coveralls - - ../../../b2 "testing.launcher=LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libasan.so.3 " address-model=64 architecture=x86 toolset=$TOOLSET cxxflags="--coverage -fsanitize=address,leak,undefined -DBOOST_TRAVISCI_BUILD $CXX_FLAGS" linkflags="$LINK_FLAGS --coverage -lasan -lubsan" + - sh -c "../../../b2 -j2 $B2_ARGS" 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.12.zip - - unzip v1.12.zip - - LCOV="`pwd`/lcov-1.12/bin/lcov --gcov-tool gcov-6" + # 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.12.zip + - unzip v1.12.zip + - LCOV="`pwd`/lcov-1.12/bin/lcov --gcov-tool gcov-6" - # 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 + # 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 - # ... erasing /test/ /example/ folder data - - cd $BOOST - - $LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info "/usr*" "*/$PROJECT_TO_TEST/test/*" $IGNORE_COVERAGE "*/$PROJECT_TO_TEST/tests/*" "*/$PROJECT_TO_TEST/examples/*" "*/$PROJECT_TO_TEST/example/*" -o $TRAVIS_BUILD_DIR/coverals/coverage.info + # ... erasing /test/ /example/ folder data + - 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 - # ... erasing data that is not related to this project directly - - OTHER_LIBS=`grep "submodule .*" .gitmodules | sed 's/\[submodule\ "\(.*\)"\]/"\*\/boost\/\1\.hpp" "\*\/boost\/\1\/\*"/g'| sed "/\"\*\/boost\/$PROJECT_TO_TEST\/\*\"/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" + # ... erasing data that is not related to this project directly + - 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 $OTHER_LIBS + - eval "$LCOV --remove $TRAVIS_BUILD_DIR/coverals/coverage.info $OTHER_LIBS -o $TRAVIS_BUILD_DIR/coverals/coverage.info" - # Sending data to Coveralls - - cd $TRAVIS_BUILD_DIR - - gem install coveralls-lcov - - coveralls-lcov coverals/coverage.info + # Sending data to Coveralls + - cd $TRAVIS_BUILD_DIR + - gem install coveralls-lcov + - coveralls-lcov coverals/coverage.info diff --git a/test/appveyor.yml b/test/appveyor.yml index 3f54925..4da2eb1 100644 --- a/test/appveyor.yml +++ b/test/appveyor.yml @@ -8,11 +8,14 @@ # See https://svn.boost.org/trac/boost/wiki/TravisCoverals for description of this file # and how it can be used with Boost libraries. # -# File revision #3 +# File revision #6 init: - - set BRANCH_TO_TEST=%APPVEYOR_REPO_BRANCH% # Change to branch you wish to test. Use %APPVEYOR_REPO_BRANCH% for current branch. - - set BOOST_REMOVE=type_index # Remove this folder from lib from full clone of Boost. If you are testing `any` repo, write here `any`. + # boost-local/libs/ folder to put this library into. This may be useful, if you're for example running Travis + # from `Boost.DLL` repo while Boost already has `dll` and with to replace `dll` with content of`Boost.DLL`. + # + # Otherwise just leave the default value - set BOOST_LIBS_FOLDER=%APPVEYOR_PROJECT_NAME% + - set BOOST_LIBS_FOLDER=%APPVEYOR_PROJECT_NAME% ############################################################################################################### # From this point and below code is same for all the Boost libs @@ -27,36 +30,58 @@ branches: skip_tags: true +environment: + matrix: + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + TOOLSET: msvc-9.0,msvc-10.0,msvc-11.0,msvc-12.0 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 + TOOLSET: msvc-14.1,clang-win + CXXSTD: 14,17 + ADDRMD: 32,64 + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ADDPATH: C:\cygwin\bin; + TOOLSET: gcc + CXXSTD: 03,11,14,1z + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ADDPATH: C:\cygwin64\bin; + TOOLSET: gcc + CXXSTD: 03,11,14,1z + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ADDPATH: C:\mingw\bin; + TOOLSET: gcc + CXXSTD: 03,11,14,1z + - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2013 + ADDPATH: C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin; + TOOLSET: gcc + CXXSTD: 03,11,14,1z + before_build: - - set PATH=%PATH%;C:\\MinGW\\bin - # Set this to the name of the library - - set PROJECT_TO_TEST=%APPVEYOR_PROJECT_NAME% - - echo "Testing %PROJECT_TO_TEST%" + - set BOOST_BRANCH=develop + - if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master + - echo "Testing %APPVEYOR_PROJECT_NAME%" # Cloning Boost libraries (fast nondeep cloning) - set BOOST=C:/boost-local - - git init %BOOST% + - git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git %BOOST% - cd %BOOST% - - git remote add --no-tags -t %BRANCH_TO_TEST% origin https://github.com/boostorg/boost.git - - git fetch --depth=1 - - git checkout %BRANCH_TO_TEST% - - git submodule update --init --merge - - git remote set-branches --add origin %BRANCH_TO_TEST% - - git pull --recurse-submodules - - git status - - rm -rf %BOOST%/libs/%BOOST_REMOVE% - - mv %APPVEYOR_BUILD_FOLDER% %BOOST%/libs/%PROJECT_TO_TEST% - - set TRAVIS_BUILD_DIR=%BOOST%/libs/%PROJECT_TO_TEST% + - git submodule update --init --depth 1 tools/build tools/boostdep + + - rm -rf %BOOST%/libs/%BOOST_LIBS_FOLDER% + - mv -f %APPVEYOR_BUILD_FOLDER% %BOOST%/libs/%BOOST_LIBS_FOLDER% + - python tools/boostdep/depinst/depinst.py --git_args "--depth 1 --jobs 2" %BOOST_LIBS_FOLDER% build_script: - - call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 - - bootstrap.bat + - cmd /c bootstrap - b2.exe headers - - cd %BOOST%/libs/%PROJECT_TO_TEST%/test + - cd %BOOST%/libs/%BOOST_LIBS_FOLDER%/test after_build: before_test: test_script: - - ..\..\..\b2.exe address-model=32 architecture=x86 toolset=msvc,gcc cxxflags="-DBOOST_TRAVISCI_BUILD" -sBOOST_BUILD_PATH=. + - PATH=%ADDPATH%%PATH% + - if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD% + - if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD% + - echo "Running command ..\..\..\b2 -j3 toolset=%TOOLSET% %CXXSTD% %ADDRMD% variant=debug,release" + - ..\..\..\b2.exe -j3 toolset=%TOOLSET% %CXXSTD% %ADDRMD% variant=debug,release cxxflags="-DBOOST_TRAVISCI_BUILD" after_test: on_success: diff --git a/test/type_index_constexpr_test.cpp b/test/type_index_constexpr_test.cpp index f80fca7..ea38aa2 100644 --- a/test/type_index_constexpr_test.cpp +++ b/test/type_index_constexpr_test.cpp @@ -1,5 +1,5 @@ // -// Copyright Antony Polukhin, 2015-2016. +// Copyright Antony Polukhin, 2015-2018. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at @@ -7,7 +7,6 @@ #include -#include #include #include @@ -90,9 +89,19 @@ void constexpr_test() { using namespace boost::typeindex; BOOST_CXX14_CONSTEXPR ctti_type_index t_int0 = ctti_type_index::type_id(); + (void)t_int0; + BOOST_CXX14_CONSTEXPR ctti_type_index t_short0 = ctti_type_index::type_id(); + (void)t_short0; + BOOST_CXX14_CONSTEXPR ctti_type_index t_int1 = ctti_type_index::type_id(); + (void)t_int1; + BOOST_CXX14_CONSTEXPR ctti_type_index t_short1 = ctti_type_index::type_id(); + (void)t_short1; + +// Following tests are known to fail on _MSC_VER == 1916. +#if !defined(_MSC_VER) || _MSC_VER > 1916 BOOST_CXX14_CONSTEXPR bool same0 = (t_int0 == t_int1); BOOST_TEST(same0); @@ -134,6 +143,8 @@ void constexpr_test() { BOOST_CXX14_CONSTEXPR bool not_in_namespace = !is_boost_namespace(); BOOST_TEST(not_in_namespace); + +#endif // #if !defined(_MSC_VER) || _MSC_VER > 1916 }