-
Notifications
You must be signed in to change notification settings - Fork 543
/
Copy pathMakeDistCheck.cmake
98 lines (77 loc) · 2.9 KB
/
MakeDistCheck.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
include(MakeDistFiles)
function(RUN_DIST_CHECK PACKAGE_PREFIX EXT)
set(tarball ${PACKAGE_PREFIX}.tar${EXT})
if(NOT EXISTS ${tarball})
message(FATAL_ERROR "Can't find dist tarball '${tarball}'")
endif()
# Remove the directory to which we're about to extract
file(REMOVE_RECURSE ${PACKAGE_PREFIX})
# Untar the distribution we want to check
set(TAR_OPTION "zxf")
if(${EXT} STREQUAL ".bz2")
set(TAR_OPTION "jxf")
endif()
execute_process_and_check_result(
COMMAND ${CMAKE_COMMAND} -E tar ${TAR_OPTION} ${tarball}
WORKING_DIRECTORY .
ERROR_MSG "Command to untar ${tarball} failed."
)
# Ensure a VERSION_CURRENT file is present.
if(MONGOCXX_INCLUDE_VERSION_FILE_IN_DIST AND NOT EXISTS ${PACKAGE_PREFIX}/build/VERSION_CURRENT)
message (FATAL_ERROR "Expected tarball to contain a `build/VERSION_CURRENT` file, but it does not")
endif ()
set(BUILD_DIR "_cmake_build")
set(INSTALL_DIR "_cmake_install")
file(REMOVE_RECURSE ${BUILD_DIR} ${INSTALL_DIR})
file(MAKE_DIRECTORY ${BUILD_DIR} ${INSTALL_DIR})
# Ensure distcheck inherits polyfill library selection.
set(polyfill_flags "")
if(NOT "${CMAKE_CXX_STANDARD}" STREQUAL "")
list(APPEND polyfill_flags "-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}")
endif()
if(NOT "${BSONCXX_POLY_USE_IMPLS}" STREQUAL "")
list(APPEND polyfill_flags "-DBSONCXX_POLY_USE_IMPLS=${BSONCXX_POLY_USE_IMPLS}")
endif()
if(NOT "${BSONCXX_POLY_USE_STD}" STREQUAL "")
list(APPEND polyfill_flags "-DBSONCXX_POLY_USE_STD=${BSONCXX_POLY_USE_STD}")
endif()
execute_process_and_check_result(
COMMAND ${CMAKE_COMMAND} -E echo "Configuring distcheck with CMake flags: ${polyfill_flags}"
WORKING_DIRECTORY .
ERROR_MSG "Failed to echo polyfill flags"
)
execute_process_and_check_result(
COMMAND ${CMAKE_COMMAND}
-S ../${PACKAGE_PREFIX}
-B .
-DCMAKE_BUILD_TYPE=Release
-DENABLE_TESTS=ON
-DMONGOCXX_ENABLE_SLOW_TESTS=ON
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}
-DCMAKE_INSTALL_PREFIX=../${INSTALL_DIR}
${polyfill_flags}
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "CMake configure command failed."
)
# Run make in the build directory
separate_arguments(build_opts)
execute_process_and_check_result(
COMMAND ${CMAKE_COMMAND} --build .
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Make build failed."
)
# Run make install
execute_process_and_check_result(
COMMAND ${CMAKE_COMMAND} --build . --target install
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Make install failed."
)
# Run make dist
execute_process_and_check_result(
COMMAND ${CMAKE_COMMAND} --build . --target dist
WORKING_DIRECTORY ${BUILD_DIR}
ERROR_MSG "Make dist failed."
)
message("distcheck complete.")
endfunction()
run_dist_check(${PACKAGE_PREFIX} .gz)