diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8af59ea53..49fa33528 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -288,6 +288,10 @@ jobs: cxxstd: "11,14,17,2a" os: macos-11 + - name: CMake tests + cmake_tests: 1 + os: ubuntu-20.04 + timeout-minutes: 60 runs-on: ${{matrix.os}} container: ${{matrix.container}} @@ -486,3 +490,19 @@ jobs: fi B2_ARGS+=("libs/$LIBRARY/test") ./b2 "${B2_ARGS[@]}" + + - name: Run CMake tests + if: matrix.cmake_tests + run: | + if [ -n "${{matrix.macosx_version_min}}" ] + then + export MACOSX_DEPLOYMENT_TARGET="${{matrix.macosx_version_min}}" + fi + cd ../boost-root + mkdir __build_static__ && cd __build_static__ + cmake ../libs/$LIBRARY/test/test_cmake + cmake --build . --target boost_${LIBRARY}_cmake_self_test -j $BUILD_JOBS + cd .. + mkdir __build_shared__ && cd __build_shared__ + cmake -DBUILD_SHARED_LIBS=On ../libs/$LIBRARY/test/test_cmake + cmake --build . --target boost_${LIBRARY}_cmake_self_test -j $BUILD_JOBS diff --git a/appveyor.yml b/appveyor.yml index 251466e41..03d2535bc 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -58,6 +58,8 @@ environment: CXXSTD: 11,14,1z ADDPATH: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin; APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015 + - TEST_CMAKE: 1 + APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 install: - set GIT_FETCH_JOBS=8 @@ -84,3 +86,17 @@ test_script: - if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD% - if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD% - b2 -j %NUMBER_OF_PROCESSORS% libs/iterator/test toolset=%TOOLSET% %CXXSTD% %ADDRMD% + +for: + - matrix: + only: [TEST_CMAKE: 1] + test_script: + - mkdir __build_static__ + - cd __build_static__ + - cmake ../libs/iterator/test/test_cmake + - cmake --build . --target boost_iterator_cmake_self_test -j %NUMBER_OF_PROCESSORS% + - cd .. + - mkdir __build_shared__ + - cd __build_shared__ + - cmake -DBUILD_SHARED_LIBS=On ../libs/iterator/test/test_cmake + - cmake --build . --target boost_iterator_cmake_self_test -j %NUMBER_OF_PROCESSORS% diff --git a/test/test_cmake/CMakeLists.txt b/test/test_cmake/CMakeLists.txt new file mode 100644 index 000000000..be363e78d --- /dev/null +++ b/test/test_cmake/CMakeLists.txt @@ -0,0 +1,20 @@ +# Copyright 2023 Andrey Semashev +# +# Distributed under the Boost Software License, Version 1.0. +# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt +# +# NOTE: This does NOT run the unit tests for Boost.Atomic. +# It only tests if the CMakeLists.txt file in its root works as expected + +cmake_minimum_required(VERSION 3.5) + +project(BoostIteratorCMakeSelfTest) + +# Use experimental superproject to pull library dependencies recursively +set(BOOST_ENABLE_CMAKE 1) +add_subdirectory(../../../.. "${CMAKE_CURRENT_BINARY_DIR}/boost_superproject") + +add_definitions(-DBOOST_ALL_NO_LIB) + +add_executable(boost_iterator_cmake_self_test main.cpp) +target_link_libraries(boost_iterator_cmake_self_test Boost::iterator) diff --git a/test/test_cmake/main.cpp b/test/test_cmake/main.cpp new file mode 100644 index 000000000..5cf0e590a --- /dev/null +++ b/test/test_cmake/main.cpp @@ -0,0 +1,54 @@ +// Copyright (c) 2023 Andrey Semashev +// +// Distributed under the Boost Software License, Version 1.0. +// See accompanying file LICENSE_1_0.txt or copy at +// https://www.boost.org/LICENSE_1_0.txt) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +template< typename Iterator > +class adapted_iterator : + public boost::iterators::iterator_adaptor< adapted_iterator< Iterator >, Iterator > +{ + friend class iterator_core_access; + +private: + typedef boost::iterators::iterator_adaptor< adapted_iterator< Iterator >, Iterator > base_type; + +public: + explicit adapted_iterator(Iterator it) : base_type(it) {} +}; + +int main() +{ + unsigned char buf[8]; + adapted_iterator< unsigned char* > b(buf), e(buf + sizeof(buf)); + return boost::iterators::distance(b, e) == static_cast< adapted_iterator< unsigned char* >::difference_type >(sizeof(buf)); +}