Skip to content

Commit 210e407

Browse files
committed
emulate FetchContent to not require CMake 3.11; closes #29
1 parent 166fd79 commit 210e407

3 files changed

Lines changed: 74 additions & 15 deletions

File tree

test/CMakeLists.txt

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
# copy reference file to ${PROJECT_BINARY_DIR}/test (aka ${CMAKE_CURRENT_BINARY_DIR})
22
file(COPY reference_grid.txt DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
33

4-
include(FetchContent)
4+
include(fetch_git_repo.cmake)
55

6-
FetchContent_Declare(
6+
fetch_git_repo(
77
googletest
8-
GIT_REPOSITORY https://github.com/google/googletest.git
9-
GIT_TAG release-1.8.0
8+
${CMAKE_BINARY_DIR}/_deps
9+
https://github.com/google/googletest.git
10+
release-1.8.0
1011
)
1112

12-
FetchContent_GetProperties(googletest)
13-
14-
if(NOT googletest_POPULATED)
15-
FetchContent_Populate(googletest)
16-
17-
# adds the targers: gtest, gtest_main, gmock, gmock_main
18-
add_subdirectory(
19-
${googletest_SOURCE_DIR}
20-
${googletest_BINARY_DIR}
21-
)
22-
endif()
13+
# adds the targers: gtest, gtest_main, gmock, gmock_main
14+
add_subdirectory(
15+
${googletest_SOURCE_DIR}
16+
${googletest_BINARY_DIR}
17+
)
2318

2419
add_executable(
2520
cpp_test

test/fetch_at_configure_step.in

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
2+
3+
project(fetch_git_repo_sub LANGUAGES NONE)
4+
5+
include(ExternalProject)
6+
7+
ExternalProject_Add(
8+
@FETCH_PROJECT_NAME@
9+
SOURCE_DIR "@FETCH_SOURCE_DIR@"
10+
BINARY_DIR "@FETCH_BINARY_DIR@"
11+
GIT_REPOSITORY
12+
@FETCH_GIT_REPOSITORY@
13+
GIT_TAG
14+
@FETCH_GIT_TAG@
15+
CONFIGURE_COMMAND ""
16+
BUILD_COMMAND ""
17+
INSTALL_COMMAND ""
18+
TEST_COMMAND ""
19+
)

test/fetch_git_repo.cmake

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# the following code to fetch a git repo at configure-time
2+
# is inspired by and adapted after https://crascit.com/2015/07/25/cmake-gtest/
3+
# defines ${_project_name}_SOURCE_DIR and ${_project_name}_BINARY_DIR
4+
5+
macro(fetch_git_repo _project_name _download_root _git_url _git_tag)
6+
7+
set(${_project_name}_SOURCE_DIR ${_download_root}/${_project_name}-src)
8+
set(${_project_name}_BINARY_DIR ${_download_root}/${_project_name}-build)
9+
10+
# variables used configuring fetch_git_repo_sub.cmake
11+
set(FETCH_PROJECT_NAME ${_project_name})
12+
set(FETCH_SOURCE_DIR ${${_project_name}_SOURCE_DIR})
13+
set(FETCH_BINARY_DIR ${${_project_name}_BINARY_DIR})
14+
set(FETCH_GIT_REPOSITORY ${_git_url})
15+
set(FETCH_GIT_TAG ${_git_tag})
16+
17+
configure_file(
18+
${CMAKE_CURRENT_LIST_DIR}/fetch_at_configure_step.in
19+
${_download_root}/CMakeLists.txt
20+
@ONLY
21+
)
22+
23+
# undefine them again
24+
unset(FETCH_PROJECT_NAME)
25+
unset(FETCH_SOURCE_DIR)
26+
unset(FETCH_BINARY_DIR)
27+
unset(FETCH_GIT_REPOSITORY)
28+
unset(FETCH_GIT_TAG)
29+
30+
# configure sub-project
31+
execute_process(
32+
COMMAND
33+
"${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
34+
WORKING_DIRECTORY
35+
${_download_root}
36+
)
37+
38+
# build sub-project which triggers ExternalProject_Add
39+
execute_process(
40+
COMMAND
41+
"${CMAKE_COMMAND}" --build .
42+
WORKING_DIRECTORY
43+
${_download_root}
44+
)
45+
endmacro()

0 commit comments

Comments
 (0)