Skip to content

Commit 9defec0

Browse files
committed
Deploy library
1 parent 543d548 commit 9defec0

File tree

4 files changed

+62
-44
lines changed

4 files changed

+62
-44
lines changed

CMakeLists.txt

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,18 @@ project(Traits VERSION 0.0.1 LANGUAGES CXX)
55

66
add_library(traits INTERFACE)
77
add_library(Traits::traits ALIAS traits)
8+
89
target_compile_features(traits INTERFACE cxx_std_20)
9-
target_include_directories(traits INTERFACE "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>")
10+
target_sources(traits INTERFACE
11+
FILE_SET HEADERS
12+
BASE_DIRS "${CMAKE_CURRENT_SOURCE_DIR}/include"
13+
FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/traits.h"
14+
)
1015

1116
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
1217
return()
1318
endif()
1419

15-
# install(TARGETS ${PROJECT_NAME}
16-
# EXPORT ${PROJECT_NAME}-targets
17-
# INCLUDES DESTINATION include
18-
# )
19-
# install(EXPORT ${PROJECT_NAME}-targets
20-
# FILE ${PROJECT_NAME}-targets.cmake
21-
# NAMESPACE Traits::
22-
# DESTINATION lib/cmake/traits
23-
# )
24-
25-
# install(FILES cmake/traits-config.cmake DESTINATION lib/cmake/traits)
26-
# install(FILES include/traits.h DESTINATION include)
27-
2820
option(TRAITS_BUILD_EXAMPLES "whether or not examples should be built" ON)
2921
option(TRAITS_BUILD_TESTS "whether or not tests should be built" ON)
3022

@@ -37,6 +29,17 @@ if(TRAITS_BUILD_TESTS)
3729
add_subdirectory(tests)
3830
endif()
3931

32+
# installation rules
33+
34+
configure_file("cmake/traits-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/traits-config-version.cmake" @ONLY)
35+
36+
install(TARGETS traits EXPORT traits-targets FILE_SET HEADERS DESTINATION "include/traits-${PROJECT_VERSION}")
37+
38+
install(EXPORT traits-targets NAMESPACE Traits:: FILE "traits-targets.cmake" DESTINATION "lib/cmake/traits-${PROJECT_VERSION}")
39+
install(FILES "cmake/traits-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/traits-config-version.cmake" DESTINATION "lib/cmake/traits-${PROJECT_VERSION}")
40+
41+
# Downloadable package for fetch content
42+
4043
set(package_files examples/ include/ tests/ CMakeLists.txt LICENSE README.md)
4144
add_custom_command(
4245
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-src.zip
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
set(PACKAGE_VERSION @CMAKE_PROJECT_VERSION@)
2+
3+
if("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL "@CMAKE_PROJECT_VERSION_MAJOR@")
4+
if ("${PACKAGE_FIND_VERSION_MINOR}" EQUAL "@CMAKE_PROJECT_VERSION_MINOR@")
5+
set(PACKAGE_VERSION_EXACT TRUE)
6+
elseif("${PACKAGE_FIND_VERSION_MINOR}" LESS "@CMAKE_PROJECT_VERSION_MINOR@")
7+
set(PACKAGE_VERSION_COMPATIBLE TRUE)
8+
else()
9+
set(PACKAGE_VERSION_UNSUITABLE TRUE)
10+
endif()
11+
else()
12+
set(PACKAGE_VERSION_UNSUITABLE TRUE)
13+
endif()

cmake/traits-config.cmake

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
if(NOT TARGET Traits::traits)
2+
include("${CMAKE_CURRENT_LIST_DIR}/traits-targets.cmake")
3+
endif()

tests/CMakeLists.txt

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,32 @@ foreach(TEST IN LISTS TESTS)
2525
gtest_discover_tests(${TEST})
2626
endforeach()
2727

28-
# # Add the deployment test, which checks that we can indeed install dyno and
29-
# # then use `find_package` to depend on it from another CMake project.
30-
# include(ExternalProject)
31-
# set(DYNO_FAKE_INSTALL_DIR "${PROJECT_BINARY_DIR}/fakeroot")
32-
# ExternalProject_Add(test.deploy.fakeroot
33-
# SOURCE_DIR "${PROJECT_SOURCE_DIR}"
34-
# EXCLUDE_FROM_ALL TRUE
35-
# BUILD_ALWAYS TRUE
36-
# INSTALL_DIR "${DYNO_FAKE_INSTALL_DIR}"
37-
# CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
38-
# -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
39-
# -DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
40-
# -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
41-
# TEST_COMMAND "" # Disable test step
42-
# UPDATE_COMMAND "" # Disable source work-tree update
43-
# )
44-
45-
# add_custom_target(test.deploy
46-
# DEPENDS test.deploy.fakeroot
47-
# COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
48-
# COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
49-
# COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy"
50-
# ${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
51-
# -DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
52-
# -DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${DYNO_FAKE_INSTALL_DIR}"
53-
# -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
54-
# COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy"
55-
# )
56-
# add_test(NAME test.deploy
57-
# COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.deploy)
28+
# Add the deployment test, which checks that we can indeed install traits and
29+
# then use `find_package` to depend on it from another CMake project.
30+
include(ExternalProject)
31+
set(TRAITS_FAKE_INSTALL_DIR "${PROJECT_BINARY_DIR}/fakeroot")
32+
ExternalProject_Add(test.deploy.fakeroot
33+
SOURCE_DIR "${PROJECT_SOURCE_DIR}"
34+
EXCLUDE_FROM_ALL TRUE
35+
BUILD_ALWAYS TRUE
36+
INSTALL_DIR "${TRAITS_FAKE_INSTALL_DIR}"
37+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
38+
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
39+
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
40+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
41+
TEST_COMMAND "" # Disable test step
42+
UPDATE_COMMAND "" # Disable source work-tree update
43+
)
44+
45+
add_custom_target(test.deploy
46+
DEPENDS test.deploy.fakeroot
47+
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
48+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/deploy"
49+
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy"
50+
${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
51+
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
52+
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${TRAITS_FAKE_INSTALL_DIR}"
53+
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
54+
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy"
55+
)
56+
add_test(NAME test.deploy COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.deploy)

0 commit comments

Comments
 (0)