diff --git a/.github/workflows/ci_tests.yml b/.github/workflows/ci_tests.yml index 8fe6056..631de18 100644 --- a/.github/workflows/ci_tests.yml +++ b/.github/workflows/ci_tests.yml @@ -104,7 +104,7 @@ jobs: - name: Build Release run: | cmake --build build --config Release --verbose - # TODO: cmake --build build --config Release --target all_verify_interface_header_sets + cmake --build build --config Release --target all_verify_interface_header_sets cmake --install build --config Release --prefix /tmp/beman.inplace_vector find /tmp/beman.inplace_vector -type f - name: Test Release @@ -112,7 +112,7 @@ jobs: - name: Build Debug run: | cmake --build build --config Debug --verbose - # TODO: cmake --build build --config Debug --target all_verify_interface_header_sets + cmake --build build --config Debug --target all_verify_interface_header_sets cmake --install build --config Debug --prefix /tmp/beman.inplace_vector find /tmp/beman.inplace_vector -type f - name: Test Debug diff --git a/.gitignore b/.gitignore index 172d4ef..65d887b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /build /out CMakeUserPresets.json +CMakeCache.txt +CMakeFiles/ diff --git a/CMakeLists.txt b/CMakeLists.txt index e7d6744..2aab682 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,9 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # cmake-format: on -cmake_minimum_required(VERSION 3.23) +set(CMAKE_SKIP_TEST_ALL_DEPENDENCY FALSE) + +cmake_minimum_required(VERSION 3.25...3.31) project( beman.inplace_vector @@ -13,6 +15,10 @@ project( LANGUAGES CXX ) +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + message(FATAL_ERROR "In-source builds are not allowed!") +endif() + # [CMAKE.SKIP_EXAMPLES] option( BEMAN_EXEMPLAR_BUILD_EXAMPLES @@ -27,41 +33,58 @@ option( ${PROJECT_IS_TOP_LEVEL} ) +set(CPACK_GENERATOR TGZ) + include(GNUInstallDirs) +include(CPack) add_library(beman.inplace_vector INTERFACE) # [CMAKE.LIBRARY_ALIAS] add_library(beman::inplace_vector ALIAS beman.inplace_vector) -target_include_directories( +target_sources( beman.inplace_vector - INTERFACE - $ - $ + PUBLIC + FILE_SET inplace_vector_public_headers + TYPE HEADERS + BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/include + FILES + "${CMAKE_CURRENT_SOURCE_DIR}/include/beman/inplace_vector/inplace_vector.hpp" ) +set_target_properties( + beman.inplace_vector + PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON +) +target_compile_features(beman.inplace_vector INTERFACE cxx_std_23) + +set(TARGET_PACKAGE_NAME ${PROJECT_NAME}-config) +set(TARGETS_EXPORT_NAME ${PROJECT_NAME}-targets) +set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) # Install the InplaceVector library to the appropriate destination install( TARGETS beman.inplace_vector EXPORT ${TARGETS_EXPORT_NAME} - DESTINATION - ${CMAKE_INSTALL_LIBDIR} -) - -# Install the header files to the appropriate destination -install( - DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/ - DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${CMAKE_PROJECT_NAME} - FILES_MATCHING - PATTERN - "${CMAKE_CURRENT_SOURCE_DIR}/include/beman/inplace_vector/inplace_vector.hpp" + FILE_SET inplace_vector_public_headers ) if(BEMAN_INPLACE_VECTOR_BUILD_TESTS) - include(CTest) + enable_testing() add_subdirectory(tests/beman/inplace_vector) endif() if(BEMAN_EXEMPLAR_BUILD_EXAMPLES) add_subdirectory(examples) endif() + +# Coverage +configure_file(cmake/gcovr.cfg.in gcovr.cfg @ONLY) + +add_custom_target( + process_coverage + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS test + COMMENT "Running gcovr to process coverage results" + COMMAND mkdir -p coverage + COMMAND gcovr --config gcovr.cfg . +) diff --git a/README.md b/README.md index f1936fd..1ed79b6 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ TODO: tested platforms. ```text # Configure build -$ cmake -S . -B build -DCMAKE_CXX_STANDARD=20 +$ cmake -S . -B build -DCMAKE_CXX_STANDARD=23 -- The CXX compiler identification is GNU 11.4.0 -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done diff --git a/cmake/gcovr.cfg.in b/cmake/gcovr.cfg.in new file mode 100644 index 0000000..0b5d1a3 --- /dev/null +++ b/cmake/gcovr.cfg.in @@ -0,0 +1,12 @@ +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception. + +root = @CMAKE_SOURCE_DIR@ +cobertura = @CMAKE_BINARY_DIR@/coverage/cobertura.xml +sonarqube = @CMAKE_BINARY_DIR@/coverage/sonarqube.xml +html-details = @CMAKE_BINARY_DIR@/coverage/coverage.html +gcov-parallel = yes +html-theme = blue +html-self-contained = yes +print-summary = yes +filter = .*/beman/inplace_vector/.* +exclude = .*\.t\.cpp