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..f86fad4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ # SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception # cmake-format: on -cmake_minimum_required(VERSION 3.23) +cmake_minimum_required(VERSION 3.25...3.31) project( beman.inplace_vector @@ -13,6 +13,27 @@ project( LANGUAGES CXX ) +if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) + message(FATAL_ERROR "In-source builds are not allowed!") +endif() + +# Require C++20, but let a parent project ask for something higher +if(DEFINED CMAKE_CXX_STANDARD) + if(CMAKE_CXX_STANDARD EQUAL 98 OR CMAKE_CXX_STANDARD LESS 20) + message(FATAL_ERROR "This project requires at least C++23") + endif() +else() + set(CMAKE_CXX_STANDARD 23) +endif() + +# Always enforce the language constraint +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# We don't need compiler extensions, but let a parent ask for them +if(NOT DEFINED CMAKE_CXX_EXTENSIONS) + set(CMAKE_CXX_EXTENSIONS OFF) +endif() + # [CMAKE.SKIP_EXAMPLES] option( BEMAN_EXEMPLAR_BUILD_EXAMPLES @@ -27,38 +48,42 @@ 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 + 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 - INTERFACE - $ - $ + PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON ) +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() 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