Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/install cmake config package #32

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/ci_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,15 +104,15 @@ 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
run: ctest --test-dir build --build-config Release
- 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
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/build
/out
CMakeUserPresets.json
CMakeCache.txt
CMakeFiles/
91 changes: 73 additions & 18 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -27,41 +33,90 @@ option(
${PROJECT_IS_TOP_LEVEL}
)

set(CPACK_GENERATOR TGZ)

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)
include(CPack)

add_library(beman.inplace_vector INTERFACE)
add_library(beman_inplace_vector INTERFACE)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This name is non conforming

Copy link
Contributor Author

@ClausKlein ClausKlein Dec 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

# [CMAKE.LIBRARY_ALIAS]
add_library(beman::inplace_vector ALIAS beman.inplace_vector)
add_library(beman::beman_inplace_vector ALIAS beman_inplace_vector)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is non conforming

Copy link
Contributor Author

@ClausKlein ClausKlein Dec 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

see #32 (comment)

Please try yourself to make it work with confirming names!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wdym try to make it work?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

endless loop: you want some changes; I show you it does not work;


target_include_directories(
beman.inplace_vector
INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
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
PROPERTIES VERIFY_INTERFACE_HEADER_SETS ON
)
target_compile_features(beman_inplace_vector INTERFACE cxx_std_23)

# export cmake config package
set(TARGET_NAME inplace_vector)
set(TARGET_NAMESPACE beman)
set(TARGET_ALIAS ${TARGET_NAMESPACE}::${TARGET_NAME})
set(TARGET_PREFIX ${TARGET_NAMESPACE}.${TARGET_NAME}) # -> PROJECT_NAME?
set(TARGET_PACKAGE_NAME ${TARGET_NAME}-config)
set(TARGETS_EXPORT_NAME ${TARGET_NAME}-targets)
set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/${TARGET_NAME})

# Install the InplaceVector library to the appropriate destination
install(
TARGETS beman.inplace_vector
TARGETS beman_inplace_vector
EXPORT ${TARGETS_EXPORT_NAME}
DESTINATION
${CMAKE_INSTALL_LIBDIR}
FILE_SET inplace_vector_public_headers
)

write_basic_package_version_file(
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-version.cmake
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)

configure_package_config_file(
cmake/config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}.cmake
INSTALL_DESTINATION ${INSTALL_CONFIGDIR}
)

# 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"
FILES
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}.cmake
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PACKAGE_NAME}-version.cmake
DESTINATION ${INSTALL_CONFIGDIR}
)

install(
EXPORT ${TARGETS_EXPORT_NAME}
FILE ${TARGETS_EXPORT_NAME}.cmake
DESTINATION "${INSTALL_CONFIGDIR}"
NAMESPACE ${TARGET_NAMESPACE}::
)

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 .
)
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 7 additions & 0 deletions cmake/config.cmake.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# cmake/Config.cmake.in -*-makefile-*-
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

@PACKAGE_INIT@

include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
check_required_components("@TARGET_NAME@")
13 changes: 13 additions & 0 deletions cmake/gcovr.cfg.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 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
# XXX gcov-executable = @GCOV_EXECUTABLE@
gcov-parallel = yes
html-theme = blue
html-self-contained = yes
print-summary = yes
filter = .*/beman/inplace_vector/.*
exclude = .*\.t\.cpp
14 changes: 12 additions & 2 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

cmake_minimum_required(VERSION 3.25...3.31)

project(beman_inplace_vector_example LANGUAGES CXX)

if(PROJECT_IS_TOP_LEVEL)
find_package(inplace_vector 1.0.0 EXACT REQUIRED)
enable_testing()
endif()

set(ALL_EXAMPLES fibonacci)

message("Examples to be built: ${ALL_EXAMPLES}")
message(STATUS "Examples to be built: ${ALL_EXAMPLES}")

foreach(example ${ALL_EXAMPLES})
add_executable(beman.inplace_vector.examples.${example})
Expand All @@ -12,6 +21,7 @@ foreach(example ${ALL_EXAMPLES})
)
target_link_libraries(
beman.inplace_vector.examples.${example}
beman.inplace_vector
beman::beman_inplace_vector
)
add_test(NAME ${example} COMMAND beman.inplace_vector.examples.${example})
endforeach()
33 changes: 29 additions & 4 deletions tests/beman/inplace_vector/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,43 @@

# Tests
add_executable(beman.inplace_vector.test inplace_vector.test.cpp)

target_link_libraries(beman.inplace_vector.test PRIVATE beman.inplace_vector)

target_link_libraries(
beman.inplace_vector.test
PRIVATE beman::beman_inplace_vector
)
add_test(NAME beman.inplace_vector.test COMMAND beman.inplace_vector.test)

# Migrated test from original implementation
add_executable(beman.inplace_vector.ref-test ref_impl.test.cpp)
target_link_libraries(
beman.inplace_vector.ref-test
PRIVATE beman.inplace_vector
PRIVATE beman::beman_inplace_vector
)
add_test(
NAME beman.inplace_vector.ref-test
COMMAND beman.inplace_vector.ref-test
)

# test if the targets are findable from the build directory
# NOTE: For an INTERFACE library and multi config generators, we may always use
# the -C Debug config type instead of $<CONFIG> to prevent problems! CK
if(CMAKE_BUILD_TYPE STREQUAL Debug)
if(NOT DEFINED CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 23)
endif()
if(NOT DEFINED CMAKE_PREFIX_PATH)
set(CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
endif()
add_test(
NAME find-package-test
COMMAND
${CMAKE_CTEST_COMMAND} --verbose --output-on-failure -C Debug
--build-and-test "${PROJECT_SOURCE_DIR}/examples"
"${CMAKE_CURRENT_BINARY_DIR}/find-package-test" --build-generator
${CMAKE_GENERATOR} --build-makeprogram ${CMAKE_MAKE_PROGRAM}
--build-options "-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}"
"-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}"
"-DCMAKE_BUILD_TYPE=Debug"
"-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
)
endif()
Loading