diff --git a/.travis.yml b/.travis.yml index d74a90e..ff6aa27 100644 --- a/.travis.yml +++ b/.travis.yml @@ -312,14 +312,46 @@ matrix: env: UBSAN=1 TOOLSET=clang COMPILER=clang++ CXXSTD=03,11,14,1z UBSAN_OPTIONS=print_stacktrace=1 - os: linux - compiler: g++ - env: CMAKE_SUBDIR_TEST=1 + env: CMAKE=1 script: - - cd libs/system/test/cmake_subdir_test && mkdir __build__ && cd __build__ + - mkdir __build__ && cd __build__ + - cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBOOST_INCLUDE_LIBRARIES=system .. + - ctest --output-on-failure -R boost_system + + - os: linux + env: CMAKE=1 BUILD_SHARED_LIBS=ON + script: + - mkdir __build__ && cd __build__ + - cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBUILD_SHARED_LIBS=ON -DBOOST_INCLUDE_LIBRARIES=system .. + - ctest --output-on-failure -R boost_system + + - os: linux + env: CMAKE_SUBDIR_TEST=1 + install: + - BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true + - git clone -b $BOOST_BRANCH https://github.com/boostorg/assert.git ../assert + - git clone -b $BOOST_BRANCH https://github.com/boostorg/config.git ../config + - git clone -b $BOOST_BRANCH https://github.com/boostorg/core.git ../core + - git clone -b $BOOST_BRANCH https://github.com/boostorg/predef.git ../predef + - git clone -b $BOOST_BRANCH https://github.com/boostorg/winapi.git ../winapi + script: + - cd test/cmake_subdir_test && mkdir __build__ && cd __build__ - cmake .. - cmake --build . - cmake --build . --target check + - os: linux + env: CMAKE_INSTALL=1 + script: + - pip install --user cmake + - mkdir __build__ && cd __build__ + - cmake -DBOOST_ENABLE_CMAKE=1 -DBoost_VERBOSE=1 -DBOOST_INCLUDE_LIBRARIES=system -DCMAKE_INSTALL_PREFIX=~/.local .. + - cmake --build . --target install + - cd ../libs/system/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 .. diff --git a/CMakeLists.txt b/CMakeLists.txt index 5190213..bd1df5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,12 +1,10 @@ -# Copyright 2018 Mike Dev +# Copyright 2018-2020 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 -# Partial (add_subdirectory only) and experimental CMake support -# Subject to change; please do not rely on the contents of this file yet +cmake_minimum_required(VERSION 3.5...3.16) -cmake_minimum_required(VERSION 3.5) -project(BoostSystem LANGUAGES CXX) +project(boost_system VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX) add_library(boost_system INTERFACE) add_library(Boost::system ALIAS boost_system) @@ -14,7 +12,13 @@ add_library(Boost::system ALIAS boost_system) target_include_directories(boost_system INTERFACE include) target_link_libraries(boost_system - INTERFACE - Boost::config - Boost::winapi + INTERFACE + Boost::config + Boost::winapi ) + +if(BUILD_TESTING) + + add_subdirectory(test) + +endif() diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100644 index 0000000..e4457f8 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,71 @@ +# Copyright 2018-2020 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 + +include(BoostTest OPTIONAL RESULT_VARIABLE HAVE_BOOST_TEST) + +if(NOT HAVE_BOOST_TEST) + return() +endif() + +macro(system_run s1) + + string(MAKE_C_IDENTIFIER ${s1} n1) + + boost_test(SOURCES ${s1} ${ARGN}) + boost_test(SOURCES ${s1} ${ARGN} COMPILE_DEFINITIONS BOOST_NO_ANSI_APIS NAME ${n1}_no_ansi) + boost_test(SOURCES ${s1} ${ARGN} COMPILE_DEFINITIONS BOOST_SYSTEM_USE_UTF8 NAME ${n1}_utf8) + +endmacro() + +macro(lib name macro) + + add_library(${name} ${ARGN}) + target_compile_definitions(${name} PRIVATE $<$:${macro}=1>) + target_link_libraries(${name} PRIVATE Boost::system Boost::config) + +endmacro() + +set(BOOST_TEST_LINK_LIBRARIES Boost::system Boost::core Boost::static_assert) + +boost_test(SOURCES quick.cpp) + +system_run(error_code_test.cpp) +system_run(error_code_user_test.cpp) +system_run(system_error_test.cpp) + +lib(boost_system_throw_test THROW_DYN_LINK throw_test.cpp) +boost_test(SOURCES dynamic_link_test.cpp LINK_LIBRARIES boost_system_throw_test) + +system_run(initialization_test.cpp) +system_run(header_only_test.cpp) + +boost_test(SOURCES config_test.cpp) + +system_run(std_interop_test.cpp) +system_run(std_mismatch_test.cpp) + +lib(boost_system_single_instance_lib1 SINGLE_INSTANCE_DYN_LINK single_instance_1.cpp) +lib(boost_system_single_instance_lib2 SINGLE_INSTANCE_DYN_LINK single_instance_2.cpp) + +system_run(single_instance_test.cpp single_instance_1.cpp single_instance_2.cpp) +boost_test(SOURCES single_instance_test.cpp NAME single_instance_test_lib LINK_LIBRARIES boost_system_single_instance_lib1 boost_system_single_instance_lib2) + +system_run(before_main_test.cpp) +system_run(constexpr_test.cpp) +system_run(win32_hresult_test.cpp) + +system_run(error_category_test.cpp) +system_run(generic_category_test.cpp) +system_run(system_category_test.cpp) +system_run(after_main_test.cpp) +system_run(failed_test.cpp) +system_run(failed_constexpr_test.cpp) + +boost_test(SOURCES warnings_test.cpp COMPILE_OPTIONS -Wall -Werror) + +lib(boost_system_std_single_instance_lib1 STD_SINGLE_INSTANCE_DYN_LINK std_single_instance_1.cpp) +lib(boost_system_std_single_instance_lib2 STD_SINGLE_INSTANCE_DYN_LINK std_single_instance_2.cpp) + +system_run(std_single_instance_test.cpp std_single_instance_1.cpp std_single_instance_2.cpp) +boost_test(SOURCES std_single_instance_test.cpp NAME std_single_instance_test_lib LINK_LIBRARIES boost_system_std_single_instance_lib1 boost_system_std_single_instance_lib2) diff --git a/test/cmake_install_test/CMakeLists.txt b/test/cmake_install_test/CMakeLists.txt new file mode 100644 index 0000000..7463fd0 --- /dev/null +++ b/test/cmake_install_test/CMakeLists.txt @@ -0,0 +1,18 @@ +# 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_system REQUIRED) +find_package(boost_core REQUIRED) + +add_executable(quick ../quick.cpp) +target_link_libraries(quick Boost::system Boost::core) + +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 index 587e7c6..d30321b 100644 --- a/test/cmake_subdir_test/CMakeLists.txt +++ b/test/cmake_subdir_test/CMakeLists.txt @@ -2,7 +2,7 @@ # 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) +cmake_minimum_required(VERSION 3.5...3.16) project(cmake_subdir_test LANGUAGES CXX)