Skip to content

Commit 3bc1461

Browse files
committed
Add fetch content test
1 parent edcd4e7 commit 3bc1461

File tree

5 files changed

+62
-18
lines changed

5 files changed

+62
-18
lines changed

CMakeLists.txt

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,15 @@ target_sources(traits INTERFACE
1212
FILES "${CMAKE_CURRENT_SOURCE_DIR}/include/traits.h"
1313
)
1414

15+
# only proceed if we are building the library directly
16+
1517
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
1618
return()
1719
endif()
1820

1921
option(TRAITS_BUILD_EXAMPLES "whether or not examples should be built" ON)
2022
option(TRAITS_BUILD_TESTS "whether or not tests should be built" ON)
21-
22-
if(TRAITS_BUILD_EXAMPLES)
23-
add_subdirectory(examples)
24-
endif()
25-
26-
if(TRAITS_BUILD_TESTS)
27-
enable_testing()
28-
add_subdirectory(tests)
29-
endif()
23+
set(TRAITS_PACKAGE_NAME "${PROJECT_NAME}.zip" CACHE FILEPATH "name of package file")
3024

3125
# installation rules
3226

@@ -39,15 +33,27 @@ install(FILES "cmake/traits-config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/traits-co
3933

4034
# downloadable package for fetch content
4135

42-
set (package_name "${PROJECT_NAME}.zip")
4336
add_custom_command(
44-
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${package_name}"
45-
COMMAND ${CMAKE_COMMAND} -E tar c "${CMAKE_CURRENT_BINARY_DIR}/${package_name}" --format=zip --
37+
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}"
38+
COMMAND ${CMAKE_COMMAND} -E tar c "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}" --format=zip --
4639
cmake/ examples/ include/ tests/ CMakeLists.txt LICENSE README.md
4740
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
4841
)
4942
add_custom_command(
5043
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/package_name"
51-
COMMAND ${CMAKE_COMMAND} -E echo "name=${package_name}" > "${CMAKE_CURRENT_BINARY_DIR}/package_name"
44+
COMMAND ${CMAKE_COMMAND} -E echo "name=${TRAITS_PACKAGE_NAME}" > "${CMAKE_CURRENT_BINARY_DIR}/package_name"
5245
)
53-
add_custom_target(package DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${package_name}" "${CMAKE_CURRENT_BINARY_DIR}/package_name")
46+
add_custom_target(package DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${TRAITS_PACKAGE_NAME}" "${CMAKE_CURRENT_BINARY_DIR}/package_name")
47+
48+
# optional examples
49+
50+
if(TRAITS_BUILD_EXAMPLES)
51+
add_subdirectory(examples)
52+
endif()
53+
54+
# optional tests
55+
56+
if(TRAITS_BUILD_TESTS)
57+
enable_testing()
58+
add_subdirectory(tests)
59+
endif()

tests/CMakeLists.txt

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ endforeach()
2828
# Add the deployment test, which checks that we can indeed install traits and
2929
# then use `find_package` to depend on it from another CMake project.
3030
include(ExternalProject)
31-
set(TRAITS_FAKE_INSTALL_DIR "${PROJECT_BINARY_DIR}/fakeroot")
31+
set(FAKE_INSTALL_DIR "${PROJECT_BINARY_DIR}/fakeroot")
3232
ExternalProject_Add(test.deploy.fakeroot
3333
SOURCE_DIR "${PROJECT_SOURCE_DIR}"
3434
EXCLUDE_FROM_ALL TRUE
3535
BUILD_ALWAYS TRUE
36-
INSTALL_DIR "${TRAITS_FAKE_INSTALL_DIR}"
36+
INSTALL_DIR "${FAKE_INSTALL_DIR}"
3737
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
3838
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
3939
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
@@ -49,8 +49,25 @@ add_custom_target(test.deploy
4949
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/deploy"
5050
${CMAKE_COMMAND} "${CMAKE_CURRENT_SOURCE_DIR}/deploy"
5151
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
52-
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${TRAITS_FAKE_INSTALL_DIR}"
52+
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}\;${FAKE_INSTALL_DIR}"
5353
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
5454
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/deploy"
5555
)
5656
add_test(NAME test.deploy COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.deploy)
57+
58+
# Add the fetch test, which checks that we can indeed use fetch content
59+
# from another CMake project.
60+
61+
add_custom_target(test.fetch
62+
DEPENDS package
63+
COMMAND ${CMAKE_COMMAND} -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/fetch"
64+
COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_BINARY_DIR}/fetch"
65+
COMMAND ${CMAKE_COMMAND} -S "${CMAKE_CURRENT_SOURCE_DIR}/fetch"
66+
-B "${CMAKE_CURRENT_BINARY_DIR}/fetch"
67+
-DPACKAGE_PATH="${CMAKE_CURRENT_BINARY_DIR}/../${TRAITS_PACKAGE_NAME}"
68+
-DCMAKE_CXX_COMPILER="${CMAKE_CXX_COMPILER}"
69+
-DCMAKE_PREFIX_PATH="${CMAKE_PREFIX_PATH}"
70+
-DCMAKE_TOOLCHAIN_FILE="${CMAKE_TOOLCHAIN_FILE}"
71+
COMMAND ${CMAKE_COMMAND} --build "${CMAKE_CURRENT_BINARY_DIR}/fetch"
72+
)
73+
add_test(NAME test.fetch COMMAND ${CMAKE_COMMAND} --build "${PROJECT_BINARY_DIR}" --target test.fetch)

tests/deploy/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
cmake_minimum_required(VERSION 3.0)
2-
project(external CXX)
2+
project(deploy CXX)
33
find_package(traits REQUIRED)
44

55
add_executable(main main.cpp)

tests/fetch/CMakeLists.txt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
cmake_minimum_required(VERSION 3.24)
2+
project(fetch CXX)
3+
4+
if(NOT DEFINED PACKAGE_PATH)
5+
message(FATAL_ERROR "PACKAGE_PATH is required. Please set -DPACKAGE_PATH=/path/to/package.zip")
6+
endif()
7+
8+
if(NOT EXISTS "${PACKAGE_PATH}")
9+
message(FATAL_ERROR "Package file not found at: ${PACKAGE_PATH}")
10+
endif()
11+
12+
include(FetchContent)
13+
FetchContent_Declare(traits URL "${PACKAGE_PATH}")
14+
FetchContent_MakeAvailable(traits)
15+
16+
add_executable(main main.cpp)
17+
target_link_libraries(main Traits::traits)

tests/fetch/main.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
#include <traits.h>
2+
using namespace traits;
3+
4+
int main() { return 0; }

0 commit comments

Comments
 (0)