diff --git a/.travis.yml b/.travis.yml index 95804ec..b8192f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -80,88 +80,10 @@ matrix: install: - export CXX=$COMPILER - $CXX --version + - chmod +x tools/travis-ci.sh script: - ############################################################################ - # Install libc++ and libc++abi if needed - # Taken from here: https://github.com/boostorg/hana/blob/master/.travis.yml - ############################################################################ - - | - if [[ "${CXX%%+*}" == "clang" ]]; then - if [[ "${CXX}" == "clang++-3.5" ]]; then LLVM_VERSION="3.5.2"; - elif [[ "${CXX}" == "clang++-3.6" ]]; then LLVM_VERSION="3.6.2"; - elif [[ "${CXX}" == "clang++-3.7" ]]; then LLVM_VERSION="3.7.1"; - elif [[ "${CXX}" == "clang++-3.8" ]]; then LLVM_VERSION="3.8.1"; - elif [[ "${CXX}" == "clang++-3.9" ]]; then LLVM_VERSION="3.9.1"; - elif [[ "${CXX}" == "clang++-4.0" ]]; then LLVM_VERSION="4.0.0"; - elif [[ "${CXX}" == "clang++-5.0" ]]; then LLVM_VERSION="5.0.0"; - fi - LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz" - LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz" - LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz" - mkdir -p llvm llvm/build llvm/projects/libcxx llvm/projects/libcxxabi - travis_retry wget -O - ${LLVM_URL} | tar --strip-components=1 -xJ -C llvm - travis_retry wget -O - ${LIBCXX_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxx - travis_retry wget -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxxabi - (cd llvm/build && cmake .. -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/llvm/install) - (cd llvm/build/projects/libcxx && make install -j2) - (cd llvm/build/projects/libcxxabi && make install -j2) - export STD_CXX_FLAGS="-isystem ${TRAVIS_BUILD_DIR}/llvm/install/include/c++/v1 -stdlib=libc++" - export STD_LINKER_FLAGS="-L ${TRAVIS_BUILD_DIR}/llvm/install/lib -l c++ -l c++abi" - export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRAVIS_BUILD_DIR}/llvm/install/lib" - fi - # Function for creating a new 'build' directory - - | - function renew_build { - echo "Renew build directory..." - cd $TRAVIS_BUILD_DIR - - # Remove any existing build directory - [ -e build ] && rm -r -f build - mkdir build - cd build - - # Configure the project and build it - cmake -GNinja -DCMAKE_CXX_FLAGS="$STD_CXX_FLAGS $CMAKE_CXX_FLAGS -Werror" -DCMAKE_EXE_LINKER_FLAGS="$STD_LINKER_FLAGS" -DCTI_CONTINUABLE_WITH_NO_EXCEPTIONS=$WITH_NO_EXCEPTIONS -DCTI_CONTINUABLE_WITH_AWAIT=$WITH_AWAIT -DCMAKE_BUILD_TYPE=Debug .. - } - - | - if [[ $COMPILER == *"clang"* ]]; then - ASAN_OPTIONS=abort_on_error=1 - - # Build the test suite with various sanitizers: - # - ASan (LSan): - echo "Building with address sanitizer..." - CMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer" - renew_build - ninja -j2 - ctest --verbose - - # - UBSan: - echo "Building with undefined behaviour sanitizer..." - CMAKE_CXX_FLAGS="-fsanitize=undefined -fno-omit-frame-pointer" - renew_build - ninja -j2 - if [ $? -ne 0 ] ; then - return -1 - fi - - ctest --verbose - if [ $? -ne 0 ] ; then - return -1 - fi - else - # Build an run the tests suite with valgrind - renew_build - ninja -j2 - if [ $? -ne 0 ] ; then - return -1 - fi - - valgrind --error-exitcode=1 --leak-check=full --show-reachable=yes ctest --verbose - if [ $? -ne 0 ] ; then - return -1 - fi - fi + - ./tools/travis-ci.sh notifications: email: false diff --git a/tools/travis-ci.sh b/tools/travis-ci.sh new file mode 100644 index 0000000..a8c7122 --- /dev/null +++ b/tools/travis-ci.sh @@ -0,0 +1,69 @@ +#!/bin/bash -e +############################################################################ +# Install libc++ and libc++abi if needed +# Taken from here: https://github.com/boostorg/hana/blob/master/.travis.yml +############################################################################ +if [[ "${CXX%%+*}" == "clang" ]]; then + if [[ "${CXX}" == "clang++-3.5" ]]; then LLVM_VERSION="3.5.2"; + elif [[ "${CXX}" == "clang++-3.6" ]]; then LLVM_VERSION="3.6.2"; + elif [[ "${CXX}" == "clang++-3.7" ]]; then LLVM_VERSION="3.7.1"; + elif [[ "${CXX}" == "clang++-3.8" ]]; then LLVM_VERSION="3.8.1"; + elif [[ "${CXX}" == "clang++-3.9" ]]; then LLVM_VERSION="3.9.1"; + elif [[ "${CXX}" == "clang++-4.0" ]]; then LLVM_VERSION="4.0.0"; + elif [[ "${CXX}" == "clang++-5.0" ]]; then LLVM_VERSION="5.0.0"; + fi + LLVM_URL="http://llvm.org/releases/${LLVM_VERSION}/llvm-${LLVM_VERSION}.src.tar.xz" + LIBCXX_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxx-${LLVM_VERSION}.src.tar.xz" + LIBCXXABI_URL="http://llvm.org/releases/${LLVM_VERSION}/libcxxabi-${LLVM_VERSION}.src.tar.xz" + mkdir -p llvm llvm/build llvm/projects/libcxx llvm/projects/libcxxabi + wget -O - ${LLVM_URL} | tar --strip-components=1 -xJ -C llvm + wget -O - ${LIBCXX_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxx + wget -O - ${LIBCXXABI_URL} | tar --strip-components=1 -xJ -C llvm/projects/libcxxabi + (cd llvm/build && cmake .. -DCMAKE_INSTALL_PREFIX=${TRAVIS_BUILD_DIR}/llvm/install) + (cd llvm/build/projects/libcxx && make install -j2) + (cd llvm/build/projects/libcxxabi && make install -j2) + export STD_CXX_FLAGS="-isystem ${TRAVIS_BUILD_DIR}/llvm/install/include/c++/v1 -stdlib=libc++" + export STD_LINKER_FLAGS="-L ${TRAVIS_BUILD_DIR}/llvm/install/lib -l c++ -l c++abi" + export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRAVIS_BUILD_DIR}/llvm/install/lib" +fi + +# Function for creating a new 'build' directory +function renew_build { + echo "Renew build directory..." + cd $TRAVIS_BUILD_DIR + + # Remove any existing build directory + [ -e build ] && rm -r -f build + mkdir build + cd build + + # Configure the project and build it + cmake -GNinja -DCMAKE_CXX_FLAGS="$STD_CXX_FLAGS $CMAKE_CXX_FLAGS -Werror" -DCMAKE_EXE_LINKER_FLAGS="$STD_LINKER_FLAGS" -DCTI_CONTINUABLE_WITH_NO_EXCEPTIONS=$WITH_NO_EXCEPTIONS -DCTI_CONTINUABLE_WITH_AWAIT=$WITH_AWAIT -DCMAKE_BUILD_TYPE=Debug .. +} + +if [[ $COMPILER == *"clang"* ]]; then + ASAN_OPTIONS=abort_on_error=1 + + # Build the test suite with various sanitizers: + # - ASan (LSan): + echo "Building with address sanitizer..." + CMAKE_CXX_FLAGS="-fsanitize=address -fno-omit-frame-pointer" + renew_build + + ninja -j2 + ctest --verbose + + # - UBSan: + echo "Building with undefined behaviour sanitizer..." + CMAKE_CXX_FLAGS="-fsanitize=undefined -fno-omit-frame-pointer" + renew_build + + ninja -j2 + ctest --verbose +else + # Build an run the tests suite with valgrind + renew_build + + ninja -j2 + valgrind --error-exitcode=1 --leak-check=full --show-reachable=yes ctest --verbose +fi