diff --git a/.travis.yml b/.travis.yml index cda9b52..797ef32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,49 +1,322 @@ -# Copyright 2016 Edward Diener +# Copyright 2016-2019 Peter Dimov # 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) language: cpp -sudo: false - -python: "2.7" - -os: - - linux - - osx +dist: xenial branches: only: - master - develop + - /feature\/.*/ + +env: + matrix: + - BOGUS_JOB=true matrix: + + exclude: + - env: BOGUS_JOB=true + include: - - install: true + - os: linux + compiler: g++ + env: TOOLSET=gcc COMPILER=g++ CXXSTD=03,11 + + - os: linux + compiler: g++-4.4 + env: TOOLSET=gcc COMPILER=g++-4.4 CXXSTD=98 + addons: + apt: + packages: + - g++-4.4 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-4.6 + env: TOOLSET=gcc COMPILER=g++-4.6 CXXSTD=03,0x + addons: + apt: + packages: + - g++-4.6 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-4.7 + env: TOOLSET=gcc COMPILER=g++-4.7 CXXSTD=03,11 + addons: + apt: + packages: + - g++-4.7 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-4.8 + env: TOOLSET=gcc COMPILER=g++-4.8 CXXSTD=03,11 + addons: + apt: + packages: + - g++-4.8 + sources: + - ubuntu-toolchain-r-test + - os: linux + compiler: g++-4.9 + env: TOOLSET=gcc COMPILER=g++-4.9 CXXSTD=03,11 + addons: + apt: + packages: + - g++-4.9 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-5 + env: TOOLSET=gcc COMPILER=g++-5 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - g++-5 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-6 + env: TOOLSET=gcc COMPILER=g++-6 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - g++-6 + sources: + - ubuntu-toolchain-r-test + + - os: linux + dist: trusty + compiler: g++-7 + env: TOOLSET=gcc COMPILER=g++-7 CXXSTD=03,11,14,17 + addons: + apt: + packages: + - g++-7 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-8 + env: TOOLSET=gcc COMPILER=g++-8 CXXSTD=03,11,14,17,2a + addons: + apt: + packages: + - g++-8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: g++-9 + env: TOOLSET=gcc COMPILER=g++-9 CXXSTD=03,11,14,17,2a + addons: + apt: + packages: + - g++-9 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++ + env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11 + + - os: linux + dist: trusty + compiler: /usr/bin/clang++ + env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11 + addons: + apt: + packages: + - clang-3.3 + + - os: linux + dist: trusty + compiler: /usr/bin/clang++ + env: TOOLSET=clang COMPILER=/usr/bin/clang++ CXXSTD=03,11 + addons: + apt: + packages: + - clang-3.4 + + - os: linux + compiler: clang++-3.5 + env: TOOLSET=clang COMPILER=clang++-3.5 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-3.5 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-3.6 + env: TOOLSET=clang COMPILER=clang++-3.6 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-3.6 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-3.7 + env: TOOLSET=clang COMPILER=clang++-3.7 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-3.7 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-3.8 + env: TOOLSET=clang COMPILER=clang++-3.8 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-3.8 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-3.9 + env: TOOLSET=clang COMPILER=clang++-3.9 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-3.9 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-4.0 + env: TOOLSET=clang COMPILER=clang++-4.0 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-4.0 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-5.0 + env: TOOLSET=clang COMPILER=clang++-5.0 CXXSTD=03,11,14,1z + addons: + apt: + packages: + - clang-5.0 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-6.0 + env: TOOLSET=clang COMPILER=clang++-6.0 CXXSTD=03,11,14,17,2a + addons: + apt: + packages: + - clang-6.0 + sources: + - ubuntu-toolchain-r-test + + - os: linux + compiler: clang++-7 + env: TOOLSET=clang COMPILER=clang++-7 CXXSTD=03,11,14,17,2a + addons: + apt: + packages: + - clang-7 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-7 + + - os: linux + compiler: clang++-8 + env: TOOLSET=clang COMPILER=clang++-8 CXXSTD=03,11,14,17,2a + addons: + apt: + packages: + - clang-8 + sources: + - ubuntu-toolchain-r-test + - llvm-toolchain-xenial-8 + + - os: linux + compiler: clang++-9 + env: TOOLSET=clang COMPILER=clang++-9 CXXSTD=03,11,14,17,2a + addons: + apt: + packages: + - clang-9 + sources: + - ubuntu-toolchain-r-test + - sourceline: 'deb https://apt.llvm.org/xenial/ llvm-toolchain-xenial-9 main' + key_url: 'https://apt.llvm.org/llvm-snapshot.gpg.key' + + - os: linux + dist: trusty + compiler: clang++-libc++ + env: TOOLSET=clang COMPILER=clang++-libc++ CXXSTD=03,11,14,1z + addons: + apt: + packages: + - libc++-dev + + - os: osx + compiler: clang++ + env: TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z + + - os: linux + env: CMAKE_TEST=1 script: - mkdir __build__ && cd __build__ - - cmake ../test - - cmake --build . + - cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBOOST_INCLUDE_LIBRARIES=preprocessor .. + - ctest --output-on-failure -R boost_preprocessor + - os: linux + env: CMAKE_SUBDIR_TEST=1 + install: true + script: + - cd test/cmake_subdir_test && mkdir __build__ && cd __build__ + - cmake .. + - cmake --build . + - cmake --build . --target check + + - os: linux + env: CMAKE_INSTALL_TEST=1 + script: + - mkdir __build__ && cd __build__ + - cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBOOST_INCLUDE_LIBRARIES=preprocessor -DCMAKE_INSTALL_PREFIX=~/.local .. + - cmake --build . --target install + - cd ../libs/preprocessor/test/cmake_install_test && mkdir __build__ && cd __build__ + - cmake -DCMAKE_INSTALL_PREFIX=~/.local .. + - cmake --build . + - cmake --build . --target check install: + - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true - cd .. - - git clone -b $TRAVIS_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root + - git clone -b $BOOST_BRANCH --depth 1 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 - - git submodule update --init tools/boost_install - - git submodule update --init libs/headers - cp -r $TRAVIS_BUILD_DIR/* libs/preprocessor - python tools/boostdep/depinst/depinst.py preprocessor - ./bootstrap.sh - ./b2 headers script: - - TOOLSET=gcc,clang - - if [ $TRAVIS_OS_NAME == osx ]; then TOOLSET=clang; fi - - ./b2 libs/preprocessor/test toolset=$TOOLSET + - |- + echo "using $TOOLSET : : $COMPILER ;" > ~/user-config.jam + - ./b2 -j 3 libs/preprocessor/test toolset=$TOOLSET cxxstd=$CXXSTD notifications: email: diff --git a/CMakeLists.txt b/CMakeLists.txt index c0f41f9..0d24bb7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,25 @@ -# Copyright 2018 Mike Dev +# Copyright 2019 Peter Dimov # Distributed under 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 -cmake_minimum_required(VERSION 3.5) -project(BoostPreprocessor LANGUAGES CXX) +cmake_minimum_required(VERSION 3.5...3.16) + +project(boost_preprocessor VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) add_library(boost_preprocessor INTERFACE) add_library(Boost::preprocessor ALIAS boost_preprocessor) target_include_directories(boost_preprocessor INTERFACE include) +if(BOOST_SUPERPROJECT_VERSION) + + include(BoostInstall) + boost_install(TARGETS boost_preprocessor HEADER_DIRECTORY include/) + +endif() + +if(BUILD_TESTING) + + add_subdirectory(test) + +endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b56c870..f1028ba 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,16 +1,31 @@ -# Copyright 2018 Mike Dev +# Copyright 2018, 2019 Peter Dimov # Distributed under 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 -# -# NOTE: This does NOT run the unit tests for Boost.Preprocessor (yet). -# It only tests, if the CMakeLists.txt file works as expected -cmake_minimum_required( VERSION 3.5 ) +include(BoostTest OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST) -project( BoostPreprocessorCMakeSelfTest ) +if(NOT HAVE_BOOST_TEST) + return() +endif() -add_subdirectory( .. ${CMAKE_CURRENT_BINARY_DIR}/boost_preprocessor ) +set(tests_common arithmetic array comparison control debug facilities list logical punctuation selection seq slot stringize tuple variadic isempty) +set(tests_c ${tests_common}) +set(tests_cpp ${tests_common} iteration repetition quick) -add_executable( boost_preprocessor_cmake_self_test config_info.cpp ) -target_link_libraries( boost_preprocessor_cmake_self_test Boost::preprocessor ) +set(BOOST_TEST_LINK_LIBRARIES Boost::preprocessor) +include_directories(../../..) # for `include ` to work + +foreach(test IN LISTS tests_c) + + boost_test(TYPE compile SOURCES ${test}.c) + boost_test(TYPE compile NAME ${test}_c_nvm SOURCES ${test}.c COMPILE_DEFINITIONS BOOST_PP_VARIADICS=0) + +endforeach() + +foreach(test IN LISTS tests_cpp) + + boost_test(TYPE compile SOURCES ${test}.cpp) + boost_test(TYPE compile NAME ${test}_cpp_nvm SOURCES ${test}.cpp COMPILE_DEFINITIONS BOOST_PP_VARIADICS=0) + +endforeach() diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index cba56b7..0780b5f 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -22,17 +22,17 @@ alias preprocessor : : gcc 3.4 ; - + alias preprocessor : : gcc 4.1 ; - + alias preprocessor : : gcc 4.2 ; - + alias preprocessor : [ compile arithmetic.cpp ] @@ -192,22 +192,22 @@ alias preprocessor_c_nvm : tuple_c_nvm ] ; - + alias preprocessor_isempty : : gcc 3.4 ; - + alias preprocessor_isempty : : gcc 4.1 ; - + alias preprocessor_isempty : : gcc 4.2 ; - + alias preprocessor_isempty : [ compile isempty.cpp ] @@ -216,12 +216,12 @@ alias preprocessor_isempty [ compile-fail isempty_variadic_standard_failure2.cpp : BOOST_PP_VARIADICS=1 ] [ compile vaopt.cpp ] ; - + alias preprocessor_isempty_nvm : [ compile isempty.cpp : BOOST_PP_VARIADICS=0 : isempty_nvm ] ; - + alias preprocessor_isempty_c : [ compile isempty.c @@ -237,7 +237,7 @@ alias preprocessor_isempty_c : isempty_variadic_standard_failure2_c ] ; - + alias preprocessor_isempty_c_nvm : [ compile isempty.c @@ -250,7 +250,7 @@ alias preprocessor_config : [ run config_info.cpp ] ; - + alias test_clang_cuda : [ compile [ cast _ cpp : clang_cuda.cu ] @@ -267,5 +267,7 @@ alias test_iso : [ run cpp_standard.cpp ] ; - + explicit test_iso ; + +compile quick.cpp ; # "Quick" test (for CI) diff --git a/test/cmake_install_test/CMakeLists.txt b/test/cmake_install_test/CMakeLists.txt new file mode 100644 index 0000000..7c788bc --- /dev/null +++ b/test/cmake_install_test/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright 2018, 2019 Peter Dimov +# Distributed under 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 + +cmake_minimum_required(VERSION 3.5...3.16) + +project(cmake_install_test LANGUAGES CXX) + +find_package(boost_preprocessor REQUIRED) + +add_executable(quick ../quick.cpp) +target_link_libraries(quick Boost::preprocessor) + +enable_testing() +add_test(quick quick) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/cmake_subdir_test/CMakeLists.txt b/test/cmake_subdir_test/CMakeLists.txt new file mode 100644 index 0000000..1181e4a --- /dev/null +++ b/test/cmake_subdir_test/CMakeLists.txt @@ -0,0 +1,17 @@ +# Copyright 2018, 2019 Peter Dimov +# Distributed under 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 + +cmake_minimum_required(VERSION 3.5...3.16) + +project(cmake_subdir_test LANGUAGES CXX) + +add_subdirectory(../.. boostorg/preprocessor) + +add_executable(quick ../quick.cpp) +target_link_libraries(quick Boost::preprocessor) + +enable_testing() +add_test(quick quick) + +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure -C $) diff --git a/test/quick.cpp b/test/quick.cpp new file mode 100644 index 0000000..1eaac11 --- /dev/null +++ b/test/quick.cpp @@ -0,0 +1,39 @@ +// Copyright 2002 Paul Mensonides +// Copyright 2019 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include "test_macro.h" + +/* equality */ + +BEGIN BOOST_PP_EQUAL(2, 0) == 0 END +BEGIN BOOST_PP_EQUAL(2, 2) == 1 END + +/* inequality */ + +BEGIN BOOST_PP_NOT_EQUAL(2, 0) == 1 END +BEGIN BOOST_PP_NOT_EQUAL(2, 2) == 0 END + +/* less */ + +BEGIN BOOST_PP_LESS(2, 1) == 0 END +BEGIN BOOST_PP_LESS(1, 2) == 1 END + +/* less_equal */ + +BEGIN BOOST_PP_LESS_EQUAL(2, 1) == 0 END +BEGIN BOOST_PP_LESS_EQUAL(1, 2) == 1 END +BEGIN BOOST_PP_LESS_EQUAL(2, 2) == 1 END + +/* greater */ + +BEGIN BOOST_PP_GREATER(2, 1) == 1 END +BEGIN BOOST_PP_GREATER(1, 2) == 0 END + +/* greater_equal */ + +BEGIN BOOST_PP_GREATER_EQUAL(2, 1) == 1 END +BEGIN BOOST_PP_GREATER_EQUAL(1, 2) == 0 END +BEGIN BOOST_PP_GREATER_EQUAL(2, 2) == 1 END